选择具有多个匹配项的单个值

时间:2017-09-11 08:55:43

标签: xml xpath xslt-2.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个值。 谢谢你的建议!

1 个答案:

答案 0 :(得分:2)

//*[@name = 'cutSeven']选择具有name属性值的所有元素,(//*[@name = 'cutSeven'])[1]仅选择其中第一个元素。