XSLT:获取存在一个特定值的节点

时间:2010-03-31 09:27:47

标签: xml xslt umbraco

我有以下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>

我需要从&lt;中获取@id页面&gt;,其中某个值出现在其中一个&lt;值&gt; -tags。需要在&lt;中的id值&gt;保留在: $ 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>

如果是这种情况,我需要最新的id,所以这意味着如果$ itm / @ id匹配更多的值&lt;页面&gt;的,然后我需要从最新页面获取值。我上面的情况是 1352

希望这对你们有意义。顺便说一句,如果有任何不同,我会与Umbraco CMS合作。

最诚挚的问候, 金

3 个答案:

答案 0 :(得分:3)

您可以使用此

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

甚至是

(//value[.=1273])[last()]/ancestor::page[1]/@id

答案 1 :(得分:2)

类似于page[itms/values/value=$itm/@id][last()]/@id

答案 2 :(得分:1)

我的版本:/ data / page [itms / values / value / text()= $ itm / @ id] [last()] / @ id