2010-03-31 50 views
2

我有下面的XML:XSLT:获取节点,在一个特定的值存在

<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>,其中一定值出现在<之一价值> - 标签。需要在<值>中的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> 

如果是这样的话,我需要最新的ID,所以这意味着如果$ ITM/@ ID更<匹配值页面“,那么我需要从最新的页面获取值。我上面的案例将是。

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

最好的问候, 金

+0

谢谢大家。其实你们都给了我正确的答案。 1+给你们所有人:) – 2010-03-31 10:03:27

回答

3

您可以使用此

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

甚至是这个

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

OBTW:文字'1273'当然可以用一个变量代替。 – Tomalak 2010-03-31 10:03:18

2

喜欢的东西page[itms/values/value=$itm/@id][last()]/@id

1

我的版本:/数据/页[ITMS /价值/价值/文本()= $ ITM/@ ID] [最后()]/@ ID