Используя XPath, чтобы найти значение атрибута в узле на основе другого атрибута в том же узле? - PullRequest
1 голос
/ 06 октября 2009

У меня есть XML-документ, который построен довольно плохо - вместо дочерних узлов элементы имеют несколько атрибутов.

Например:

<makes>
<option make="FORD" year_start="1950" year_end="2009" />
<option make="CHEVROLET" year_start="1965" year_end="2009" />
...
</makes>

Я пытаюсь использовать XPath для выбора значения других атрибутов для всех узлов, которые соответствуют определенному атрибуту. Я заполняю 3 выпадающих меню asp со значениями из 2 XML-документов на основе предыдущего выбора. Я использую .net / c #

Например: для всех узлов параметров с атрибутом make, имеющим значение x, найдите значение year_start.

Я пробовал что-то вроде этого:

  yearListData.XPath = string.Format("/makes/option[@year_start] and [@make={0}]", make);

где make = предыдущий выбор. Очевидно, это не сработало.

Есть ли способ использовать XPath для этого?

Ответы [ 3 ]

6 голосов
/ 06 октября 2009
/makes/option[@year_start and @make="FORD"]/@year_start

Вы можете комбинировать с условиями И / ИЛИ внутри [ и ], затем запросить атрибут.

1 голос
/ 06 октября 2009

Я не знаю, сработает ли это, но я думаю, что вы могли бы сделать это с помощью чего-то вроде:


string.Format("/makes/option[@make={0}]//@year_start",make);
1 голос
/ 06 октября 2009
/makes/option[@make='FORD']/@year_start

... вы получите все атрибуты year_start в опциях, где make равен "FORD". Атрибуты, как правило, предпочтительнее дочерних элементов, если существует отношение 1 к 1 - для них не требуется подробный закрывающий тег.

Вы также можете рассмотреть linq to XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...