我想XmlNodeList
从一个巨大的 XML 文件中获取。
条件:
我有一个List
唯一的 ID 值,比如 IDList
案例一:从 IDList中收集所有被element
称为 ID 的节点。
案例二:从IDList中收集ID的attribute
被调用的idName之一具有值的所有节点。element
简而言之,只提取与 IDList 中给出的值匹配的节点。
我使用一些循环来完成此操作,例如加载此 XML 以XmlDocument
迭代所有节点和 ID 值,但我正在寻找一些复杂的方法来更快、更快速地完成它。因为循环不是大型 XML 文件的解决方案。
我的尝试:
try
{
using (XmlReader reader = XmlReader.Create(URL))
{
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNodeList nodeList = doc.GetElementsByTagName("idgroup");
foreach (XmlNode xn in nodeList)
{
string id = xn.Attributes["id"].Value;
string value = string.Empty;
if (IDList.Contains(id))
{
value = xn.ChildNodes[1].ChildNodes[1].InnerText; // <value>
if (!string.IsNullOrEmpty(value))
{
listValueCollection.Add(value);
}
}
}
}
}
catch
{}
XML (XLIFF) 结构:
<XLIFF>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
<file date="2013-07-17">
<body>
<id idName="test_001" >
<desc-group name="test_001">
<desc type="text"/>
</desc-group>
<result-unit idName="test_001_text">
<source>abcd</source>
<result>xyz</result>
</result-unit>
</id>
</body>
</file>
</xliff>
收集上面 idName 匹配的所有节点。