XSLT 1.0 - 每个节点的字符串到XML

时间:2017-11-03 13:09:17

标签: xml xslt xslt-1.0

我需要将特定节点的内容从字符串转换为XML,将此节点替换为生成的XML。该节点可以是一个数组。所以我可能需要使用for-each指令,但我不知道如何......

我在下面就像这样的XML:

<?xml version="1.0" encoding="UTF-8"?>
  <NodeA><NodeB>&lt;tagA xmlns="http://www.aaa.com"&gt;&lt;tagB&gt;valor1&lt;/tagB&gt;&lt;/tagA&gt;</NodeB><NodeB>&lt;tagA xmlns="http://www.aaa.com"&gt;&lt;tagB&gt;valor2&lt;/tagB&gt;&lt;/tagA&gt;</NodeB></NodeA>

我正在使用以下XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8"/>
<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="//NodeB">
    <xsl:value-of select="/" disable-output-escaping="yes"/>
</xsl:template>

结果是字符串被转换为XML,NodeB正在被替换,但它正在变得重复,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<NodeA>
<tagA xmlns="http://www.aaa.com">
    <tagB>valor1</tagB>
</tagA>
<tagA xmlns="http://www.aaa.com">
    <tagB>valor2</tagB>
</tagA>
<tagA xmlns="http://www.aaa.com">
    <tagB>valor1</tagB>
</tagA>
<tagA xmlns="http://www.aaa.com">
    <tagB>valor2</tagB>
</tagA>
</NodeA>

我需要以下结果:

<?xml version="1.0" encoding="UTF-8"?>
<NodeA>
<tagA xmlns="http://www.aaa.com">
    <tagB>valor1</tagB>
</tagA>
<tagA xmlns="http://www.aaa.com">
    <tagB>valor2</tagB>
</tagA>
</NodeA>

例如,如果我有数组中的3个节点,结果就会重复三次。

1 个答案:

答案 0 :(得分:1)

我认为不是

<xsl:template match="//NodeB">
    <xsl:value-of select="/" disable-output-escaping="yes"/>
</xsl:template>

你想要

<xsl:template match="NodeB">
    <xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>