首页 文章

在XSLT中转义xml标记

提问于
浏览
1

我有一个输入xml,说:

<myxml>
    <myelement id="1" />
    <myelement id="2" />
    <myelement id="3" />
</myxml>

我想创建一个XSLT,创建一个不同形式的输出xml,比如说:

<theirxml>
    <theirelement id="1" />
    <theirelement id="2" />
    <theirelement id="3" />
</theirxml>

因为我无法在标签内创建带标签的xslt(例如“<theirelement id =”<xslt:...>“>”我找到了一种方法,用CDATA进行如下操作(仅提供相关部分) of xslt):

<xsl:for-each select="myxml/myelement">
    <xsl:text><![CDATA[<theirelement id="]]></xsl:text><xsl:value-of select="@name" /><xsl:text><![CDATA[" />]]></xsl:text>
</xsl:for-each>

但是,生成的输出不包含“<theirelement ...”而是“&lt; theirelement ...” . 我需要输出实际包含“<”而不是“&lt;” (同样适用于“>”和“&gt;”) .

原因,顺便说一下,因为这个过程的输出是一些程序的输入,当标签被转义为“&lt; tag&gt;”时,它无法读取xml .

任何帮助将不胜感激!

2 回答

  • 2

    这是一个执行所需转换的样式表:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
        <xsl:output encoding="utf-8" method="xml"/>
    
        <xsl:template match="/">
            <myxml>
                <xsl:apply-templates/>
            </myxml>
        </xsl:template>
    
        <xsl:template match="myelement">
            <theirelement>
                <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
            </theirelement>
        </xsl:template>
    
    </xsl:stylesheet>
    
  • 1

    来自@ fred02138的解决方案可以简化为:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
        <xsl:output encoding="utf-8" method="xml"/>
    
        <xsl:template match="/">
            <myxml>
                <xsl:apply-templates/>
            </myxml>
        </xsl:template>
    
        <xsl:template match="myelement">
            <theirelement id="{@id}"/>
        </xsl:template>
    
    </xsl:stylesheet>
    

    大括号中的构造是一个“属性值模板”,以防您想在XSLT引用中查找它 .

相关问题