Я хотел бы получить XmlNodeList
из огромного файла XML.Получить XmlNodeList, если конкретный элемент или его значение атрибута присутствует в данном списке строк
Условия: У меня есть List
уникальных значений ID, скажем список_идентификаторов
Случай I: Соберите все узлы, где element
называется ID имеет значение от список_идентификаторов.
Корпус II: Соберите все узлы, где один из attribute
с именем idName 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 матчи.
XML, который вы подключили, не является корректным и не описывает формат файла. Кроме того, я не знаю, что вы подразумеваете под XLIFF, но ваш пример определенно не такой: http://en.wikipedia.org/wiki/XLIFF –
@ Ioannis Karadimas: Спасибо, я просто обновил структуру XLIFF здесь , – Indigo
Пожалуйста, проверьте мое сообщение. Я привел пример, который может его проанализировать. –