XSLT: получить узел, в котором присутствует одно определенное значение. - PullRequest
2 голосов
/ 31 марта 2010

У меня есть следующий XML:

<data>
    <page id="1118">
        <itms>
            <values>
                <value>1104</value>
            </values>
        </itms>
    </page>
    <page id="1177">
        <itms>
            <values>
                <value>1273</value>
                <value>1215</value>
            </values>
        </itms>
    </page>
</data>

Мне нужно получить @id из <страницы>, где определенное значение присутствует в одном из тегов . Идентификатор, который должен быть в , хранится в этом файле: $itm/@id.

Это означает, что если мой $ itm / @ id равен 1273, мне нужно вернуть 1177. Я не совсем уверен, как этого добиться.

На самом деле у меня может быть и XML, который выглядит так:

<data>
    <page id="1118">
        <itms>
            <values>
                <value>1104</value>
            </values>
        </itms>
    </page>
    <page id="1177">
        <itms>
            <values>
                <value>1273</value>
                <value>1215</value>
            </values>
        </itms>
    </page>
    <page id="1352">
        <itms>
            <values>
                <value>1242</value>
                <value>1273</value>
            </values>
        </itms>
    </page>
</data>

Если это так, мне нужен последний идентификатор, так что это означает, что если $ itm / @ id соответствует значениям в большем количестве , то мне нужно получить значение с последней страницы. В приведенном выше случае это будет 1352 .

Надеюсь, это имеет смысл для вас, ребята. И, кстати, я работаю с Umbraco CMS, если это что-то меняет.

С наилучшими пожеланиями, Ким

Ответы [ 3 ]

3 голосов
/ 31 марта 2010

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

(/data/page[itms/values/value = 1273])[last()]/@id

или даже это

(//value[.=1273])[last()]/ancestor::page[1]/@id
2 голосов
/ 31 марта 2010

Что-то вроде page[itms/values/value=$itm/@id][last()]/@id.

1 голос
/ 31 марта 2010

моя версия: / data / page [itms / values ​​/ value / text () = $ itm / @ id] [last ()] / @ id

...