Как бы получить guid, зная имя с помощью xpath

Учитывая следующий ответ, который может иметь несколько Query элементы (которые должны иметь разные имена) и несколько Row элементы, которые должны иметь разные name а также manufacturerguid элементы внутри.

<?xml version="1.0" encoding="utf-8"?>
<AspDotNetStorefrontImportResult Version="7.1" DateTime="10/2/2013 4:17:04 PM">
 <Query Name="Manufacturers">
  <Row>
    <name>Nike</name>
    <manufacturerguid>84775261-731d-4e11-bb82-fa5f61bc61c5</manufacturerguid>
  </Row>
 </Query>
</AspDotNetStorefrontImportResult>

Как я могу использовать xpath для получения руководства производителя, когда я знаю имя запроса и имя в строке? (попробовал следующее, чтобы получить имя)

//AspDotNetStorefrontImportResult/Query[@Name='Manufacturers']/Row/name[text()="name"

3 ответа

Немного другой ответ, который работал для меня.

/AspDotNetStorefrontImportResult/Query[@Name = 'Manufacturers']/Row[name = 'Nike']/manufacturerguid

Вы можете использовать xpath:

/AspDotNetStorefrontImportResult/Query[@Name='Manufacturers']/Row[name[.='Nike']]/manufacturerguid

Ключ является Row[name[.='Nike']], который находит строку, содержащую указанный элемент имени. Из этого ряда вы можете получить инструкцию производителя.

Вы также можете использовать following-sibling добраться от имени до производителя:

/AspDotNetStorefrontImportResult/Query[@Name='Manufacturers']/Row/name[.='Nike']/following-sibling::manufacturerguid

Ты можешь использовать .. получить доступ к родительскому узлу (на уровень выше).

//AspDotNetStorefrontImportResult/Query[@Name='Manufacturers']/Row/name[text()="Nike"]/../manufacturerguid

Чтобы получить manufacturerguid начиная с name[text()="Nike"] узел, вы можете перейти к их родителю, используя .. (приведет вас к Row), а затем снова спуститесь до manufacturerguid с помощью /manufacturerguid,


Другие опции:

Другой вариант - включить всю информацию, которую вы имеете в [] выражение запроса (Query[@Name='Manufacturers' and Row/name[text()="Nike"]]):

//AspDotNetStorefrontImportResult/Query[@Name='Manufacturers' and Row/name[text()="Nike"]]/Row/manufacturerguid

Или используйте несколько [] (работает так же: Query[@Name='Manufacturers'][Row/name[text()="Nike"]]):

//AspDotNetStorefrontImportResult/Query[@Name='Manufacturers'][Row/name[text()="Nike"]]/Row/manufacturerguid
Другие вопросы по тегам