2017-09-11 82 views
0

一个XML文件的两个部分。选择多个匹配的单个值

我想匹配名为cutSeven的节点并选择其第一个孩子节点文本。

匹配路径是未知的,所以每个XML在不同位置具有相似的信息。

我正在使用多个XML包含这些信息,我正在为它创建一个可自动更新的概述。

输入XML

<Transform> 
    <param name="originalHeader"> 
     <path>$header</path> 
    </param> 
    <param name="cutSeven"> 
      <path>"fi.siikjin.exitorder.seasam.accesscontrol.k1"</path> 
    </param> 
</Transform> 
. 
. 
. 
<Transform> 
    <param name="originalHeader"> 
     <path>$header</path> 
    </param> 
    <param name="cutSeven"> 
      <path>"fi.siikjin.exitorder.seasam.accesscontrol.k1.accesscontrol_k1.accesscontrol"</path> 
    </param> 
</Transform> 

我表达

<xsl:value-of select="//@name[normalize-space(.) = 'cutSeven']/parent::*[1]"/> 

使我的输出:

<path>"fi.siikjin.exitorder.seasam.sec.accesscontrol.k1"</path> 
<path>"fi.siikjin.exitorder.seasam.sec.accesscontrol.k1.accesscontrol_k1.accesscontrol"</path> 

预计:

<path>"fi.siikjin.exitorder.seasam.accesscontrol.k1"</path> 

如何仅选择第一个匹配节点并忽略其他匹配?或者根据我的说法,只输出1个值。 谢谢你的建议!

回答

2

//*[@name = 'cutSeven']选择所有具有该name属性值的元素和仅包含这些元素中的第一个元素的(//*[@name = 'cutSeven'])[1]

+0

谢谢! '(// @ name [normalize-space(。)='cutSeven'])[1]/parent :: *'为我工作 – MypR