如果这看起来像一个非常基本的问题,我很抱歉,但我真的(我的意思是真的)感谢我能得到的任何帮助。我只是想做以下事情:
1.用
替换自动关闭
2.从'Second_node'中抓取文本
3.将该文本存储在变量中
4.将该文本放入新的“Seventh_node”中。
我已经完成了第1步,但我似乎无法从必需的元素中检索必要的信息。我在下面列举了三个例子以及我正在使用的XSLT。我想关键问题是存储'Second_node'的文本内容并将其放在新元素中。通过添加信息,我使用Saxon 6.5进行转换。如果提供的信息仍然不完整,请告诉我。
谢谢!
源XML:
<firstnode>
<Second_node>text for second node</Second_node>
<Third_node>
<Fourth_node>
<Fifth_node>text for fifth node</Fifth_node>
<Sixth_node>text for sixth node</Sixth_node>
<Seventh_node />
</Fourth_node>
</Third_node>
</firstnode>
到目前为止我所拥有的:
<firstnode>
<Second_node>text for second node</Second_node>
<Third_node>
<Fourth_node>
<Fifth_node>text for fifth node</Fifth_node>
<Sixth_node>text for sixth node</Sixth_node>
<Seventh_node></Seventh_node>
</Fourth_node>
</Third_node>
</firstnode>
我需要什么:
<firstnode>
<Second_node>text for second node</Second_node>
<Third_node>
<Fourth_node>
<Fifth_node>text for fifth node</Fifth_node>
<Sixth_node>text for sixth node</Sixth_node>
<Seventh_node>text for second node</Seventh_node>
</Fourth_node>
</Third_node>
</firstnode>
到目前为止我的XSLT:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Seventh_node">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:text>text for second node</xsl:text>
</xsl:copy>
</xsl:template>
答案 0 :(得分:1)
您可以尝试将第二个节点中的文本放入变量中,然后使用该变量将该文本放在第七个节点中。
<xsl:variable name="VAR_SecNode">
<xsl:value-of select="Second_node"/>
</xsl:variable>
...
<Seventh_node><xsl:value-of select="$VAR_SecNode" /></Seventh_node>
...
答案 1 :(得分:1)
我认为不需要变量 试试这个:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Seventh_node">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:value-of select="//Second_node"/>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<xsl:apply-templates select="@*"/>
将复制Seventh_node的属性。 <xsl:apply-templates select="node()"/>
将复制Seventh_node的子节点。如果你不需要删除这一行。
答案 2 :(得分:0)
您可以将第二个模板更新为以下内容:
<xsl:template match="Seventh_node/text()">
<xsl:text>text for second node</xsl:text>
</xsl:template>
这只会匹配Seventh_node
的文字,并将其替换为<xsl:text>
元素中的内容。