XPath - проверить, имеет ли хотя бы один узел заданное значение - PullRequest
3 голосов
/ 05 октября 2011

Учитывая следующий XML:

<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
    <cd>
        <title>Greatest Hits</title>
        <artist>Dolly Parton</artist>
        <country>USA</country>
        <company>RCA</company>
        <price>9.90</price>
        <year>1982</year>
    </cd>
    <cd>
        <title>Still got the blues</title>
        <artist>Gary Moore</artist>
        <country>UK</country>
        <company>Virgin records</company>
        <price>10.20</price>
        <year>1990</year>
    </cd>
</catalog>

Я хотел бы проверить, имеет ли хотя бы один узел год, например, «1982».Что-то вроде:

<xsl:if test="........" ><p>passed!</p></xsl:if>

Ответы [ 3 ]

5 голосов
/ 05 октября 2011

В XPath 1.0 и Xpath 2.0 :

'1982' = /catalog/cd/year

Изменения

XPath 1.0:

1982 = /catalog/cd/year

XPath 2.0:

1982 = /catalog/cd/year/number()

Оператор XPath = очень мощен, когда хотя бы один из его аргументов является набором узлов (или последовательностью в XPath 2.0). Результат верен тогда и только тогда, когда (атомизированное) значение хотя бы одного из узлов в наборе узлов (последовательность) равно другому аргументу =. Это именно то, о чем спрашивает этот вопрос.

1 голос
/ 05 октября 2011

Попробуйте test = "index-of (/ catalog / cd / year, 1982)".

0 голосов
/ 05 октября 2011

Как насчет:

/catalog/cd/year = 1982

Этот оператор сравнения (называемый общим сравнением) возвращает true, если хотя бы один элемент с левой стороны "соответствует" одному элементу с правой стороны.

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