XSLT 1.0 - 想要从 XML 中将 " 替换为



我对xml中的一部分节点应用了CDATA,所有的<>都被&lt;&gt;取代。我想用&quot;代替"

我需要对CDATA部分进行哪些更改才能将"替换为&quot;

你没有说清楚你在做什么,所以很难简单地回答。

如果你的意思是

  • 您已经在XML文档中添加了CDATA标记的部分,您正在将其提供给XSLT样式表;
  • 样式表输出中与输入中的CDATA部分相对应的部分引用了实体ltgt,其中输入具有尖括号(因此<p class="greeting">Hello, world</p>变为&lt;p class="greeting"&gt;Hello, world!&lt;/p&gt;,这就是您想要的;和
  • 您希望"也不直接出现在输出中,而是被对实体quot
  • 的引用所取代。

then实现目标的一种方法是编写一个模板来处理文本节点,它测试是否存在",在第一个文本节点上将文本节点分为左部分和右部分",写出左部分,写出与符号,写出quot;,然后用字符串的右部分递归地调用自己。

下面的样式表演示了该模式:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
  <xsl:template match="doc">
    <xsl:element name="doc">
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>
  <xsl:template match="text()" name="escape-quot">
    <xsl:param name="s" select="."/>
    <xsl:choose>
      <xsl:when test="contains($s,'&quot;')">
        <xsl:variable name="sL" 
          select="substring-before($s,'&quot;')"/>
        <xsl:variable name="sR" 
          select="substring-after($s,'&quot;')"/>
        <xsl:value-of select="$sL"/>
        <xsl:text>&amp;quot;</xsl:text>
        <xsl:call-template name="escape-quot">
          <xsl:with-param name="s" select="$sR"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$s"/>
      </xsl:otherwise>
    </xsl:choose>    
  </xsl:template>
</xsl:stylesheet>

我们可以将其应用于以下输入以查看结果:

<doc>Hi. This is a test.
<![CDATA[<p class="greeting">Hello, 
world!</p>]]>
</doc>

我猜想,我得到的结果就是你想要的。

<?xml version="1.0"?>
<doc><p>Hi. This is a test.</p>
<p>&lt;p class=&amp;quot;greeting&amp;quot;&gt;Hello, 
world!&lt;/p&gt;</p>
</doc>

如果这不是你想要的,你可以试着更详细地解释你的问题。在这种情况下,提供(a)当前代码的关键部分,(b)示例输入,(c)当前得到的输出的示例,并描述它的错误,以及(d)您希望输出的样例,总是一个好主意。(让示例和代码都保持简短——您希望提供尽可能小的完整的工作示例,以便读者可以重现您的问题。)

相关内容

  • 没有找到相关文章

最新更新