XmlNodeList
巨大な XML ファイルから取得したいと思います。
条件:List
IDList などの一意の ID 値
を持っています
ケース I:element
呼び出された ID が IDList からの値を持つすべてのノードを収集します。
ケース II:attribute
ID の呼び出された idName の1 つがelement
IDList からの値を持つすべてのノードを収集します。
つまり、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 が一致するすべてのノードを収集します。