Как бы получить 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