XSLT:选择第一个节点并替换它的文本

时间:2014-04-19 08:13:27

标签: xslt

我正在学习xslt,所以请原谅如果下面的xml没有意义。这是我的样本xml。

<root>
<note>
<to>
    <test>text</test>
    <test1>ABC</test1>
</to>

<to>
    <test>text</test>
    <test1>content1</test1>
</to>
<to>
    <test>text</test>
    <test1>ABC</test1>
</to>
<to>
    <test>text</test>
    <test1>content1</test1>
</to>
</note>
<nodeabc>
<to>
    <test>text</test>
    <test1>ABC</test1>
</to>

 </nodeabc>
 </root>

当尝试使用text = content1的节点“test1”时,我尝试更改第一个节点“test”的文本。

例如,

out put应该是。

<root>
<note>
<to>
    <test>text</test>
    <test1>ABC</test1>
</to>

<to>
    <test>text</test>
    <test1>REPLACED</test1>
</to>
<to>
    <test>text</test>
    <test1>ABC</test1>
</to>
<to>
    <test>text</test>
    <test1>content1</test1>
</to>
</note>
<nodeabc>
<to>
    <test>text</test>
    <test1>ABC</test1>
</to>

 </nodeabc>
 </root>

我尝试了几个xslt,但似乎没有任何效果。它取代了节点“test”的所有文本出现,其中对应的“test1”具有值content1。

xslt

的一部分
<xsl:template match="to/test[../test1='content1'][1]/text()">REPLACED
 </xsl:template >

请指导可以解决的问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您当前表达式的问题在于它匹配测试元素,这些元素是元素的第一个子元素。在您的情况下,您确实希望匹配第一个元素。

试试这个表达

 <xsl:template match="to[test1='content1'][1]/test/text()">REPLACED
 </xsl:template>