带有转义实体的xslt转换



我有一个XML,我想用以下xslt:将属性值(name="name")更改为另一个(name="value")

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<!--xsl:template match="text()"-->
<!--xsl:text select="." disable-output-escaping="yes" /-->
<!--xsl:value-of select="." disable-output-escaping="yes" />
   <xsl:copy-of select="child::*"/> 
  </xsl:template-->
<xsl:template match="@*|node()" mode="s">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" mode="s"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="@*|node()" mode="se">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" mode="se"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="@name" mode="se">
    <xsl:attribute name="name">value</xsl:attribute>
</xsl:template>
<xsl:template match="tag5[@type='testtype']">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" mode="s"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="tag6[@name='name']" mode="s">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" mode="se"/>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

XML INPUT片段:

<?xml version="1.0" encoding="UTF-8"?>
<dataroot version="2.0">
<Model id="111" name="test">
    <tag1 id="222" type="VERSION">
        <tag2 id="333" name="Version" value="2"/>
    </tag1>
    <tag3 id="444">
        <tag4 id="555" versionID="test/00001" name="name" definition="through test. &#xD;&#xA;" attrs="12 23"/>
        <tag4 id="666" versionID="test/00001" name="name" definition="through test 2. &#xD;&#xA;" messages="34 45"/>
    </tag3>
    <tag5 id="777" type="testtype">
        <tag6 id="888" name="name" value="667"/>
        <tag6 id="999" name="context" value="FIX 5.0"/>
    </tag5>
</Model>
</dataroot>

应用xslt后的XML OUTPUT是:

<?xml version="1.0" encoding="UTF-8"?>
<dataroot version="2.0">
<Model id="111" name="test">
    <tag1 id="222" type="VERSION">
        <tag2 id="333" name="Version" value="2"/>
    </tag1>
    <tag3 id="444">
        <tag4 id="555" versionID="test/00001" name="name" definition="through test. &#13;&#10;" attrs="12 23"/>
        <tag4 id="666" versionID="test/00001" name="name" definition="through test 2. &#13;&#10;" messages="34 45"/>
    </tag3>
    <tag5 id="777" type="testtype">
        <tag6 id="888" name="value" value="667"/>
        <tag6 id="999" name="context" value="FIX 5.0"/>
    </tag5>
</Model>
</dataroot>

xslt基本上完成了预期的操作。然而,通过意外的转换:

&#xD;&#xA;   ->   &#13;&#10;   (unexpected transform)

我想保留原始实体。我尝试过禁用输出转义(请参阅xslt中的注释部分,将文本更改为@definition),但不起作用。有什么建议吗?

我使用xsltproc btw.

提前感谢!

xslt似乎无法处理这个需求,所以我在perl中完成了它。谢谢大家!

相关内容

  • 没有找到相关文章

最新更新