2011-05-23 6 views
0

Если у вас есть документ XML, и вам нужно найти определенные узлы на основе определенных значений атрибутов (4 числа), которые будут правильным подходом (с точки зрения производительности): -XmlDocment - как получить узлы путем фильтрации с помощью XPath

a) Отфильтруйте документ XML (с XPath), чтобы получить список узлов, который соответствует любому из значений атрибутов, а затем перейдите через список фильтрованных узлов, чтобы получить узлы, имеющие определенное значение атрибута, используя If-else.

b) Отфильтровать документ XML (с XPath) для каждого значения атрибута отдельно.

<Nodes> 
    <a class="myclass" type="type1">some text</a> 
    <a class="myclass" type="type2">some text</a> 
    <img src = "myGraphic.jpg?id={Guid}"/> 
</Nodes> 

Я использую ниже XPath (который может быть неправильно :-))

"//A[@class] | //a[@class] | //IMG[@src] | //img[@src]" 

Целью является получить отдельный список всего, имеющего тип = «Type1» отдельный список type = "type2" и отдельный список идентификаторов в теге img.

+0

Пожалуйста, покажите пример того, что вы имеете в виду. Непонятно, почему вы бы просто не использовали одно выражение XPath, чтобы сразу найти все узлы. –

+0

«почему бы вам не использовать только одно выражение XPath» - это вариант a) в вопросе. После получения всех узлов сразу нужно поставить If-else для получения значений узлов для каждого типа значения атрибута. Это хороший подход. Добавлен пример. –

+0

@user: не торопитесь. Это не обязательно, чтобы быть копией вашего реального XML. Просто что-то, что показывает, что вы имеете в виду значения атрибута. Например, я не понимаю, почему вам нужно, если/else. –

ответ

1

Моим грубым ответом было бы, производительность не имеет большого значения, если у вас нет очень большого документа или набора документов.

В этом случае вы, вероятно, захотите использовать SAX, и в любом случае вы захотите пройти документ (документы) только один раз и не удерживать все в памяти. Таким образом, вы будете передавать по документам, останавливаясь на каждом элементе a и добавляя его в список1 или list2 в зависимости от его типа.

Смежные вопросы