【问题标题】:XSLT. load xml document that contains escape charactersXSLT。加载包含转义字符的 xml 文档
【发布时间】:2010-11-13 08:06:45
【问题描述】:

我使用 XSLT 转换 XML 文档,然后将其加载到 ASP.NET 网站。但是,如果 XML 包含“<”字符,则 XML 格式不正确。

<title><b> < left arrows <b></title>

如果我使用disable-output-escaping="yes",则无法加载 XML,并且出现错误“名称不能以 '' 字符开头”。

如果我不禁用转义转义字符的输出,则会忽略转义字符,并且文本会按原样显示:

<title><b> < left arrows <b></title>

我想让粗体标签起作用,但我也想转义“

<b>&lt; left arrows</b>

是我想要实现的。有什么解决办法吗?

【问题讨论】:

  • 没有包含“
  • 你的问题很难理解。请提供:1) 示例输入,2) 示例所需输出,以及 3) 您现有的模板不能满足您的要求。
  • 请发布您的输入示例,以显示这些字符的来源。
  • songtitle 110308 ]]>
  • 鉴于我无法控制 XML 文档。注意 '',我希望输出这些字符,但同时能够将 标签中包含的字符加粗

标签: asp.net xml xslt


【解决方案1】:

我想出了一个解决方案,并被 Josh 最后的回答触发了。谢谢乔希。我尝试使用匹配模板,但是我遇到了一个问题,因为 html 标签放置在 cdata 中,所以我在匹配时遇到了困难。可能有办法做到这一点,但我放弃了。

我所做的是做一个 test="contain($text, $replace)" 其中 $replace 是 ' 或 。所以如果它只是一个不属于任何html标签的'

【讨论】:

    【解决方案2】:

    据我了解,输入包含 HTML 和文字

    您需要做的是保留 set disable-output-escaping="no" (这是默认设置,您实际上不必添加它)并添加将复制 HTML 标记的 XSLT 规则。例如:

    <xsl:template match="*">
        <xsl:copy>
            <xsl:copy-of select="@*" />
            <xsl:apply-templates />
        </xsl:copy>
    </xsl:template>
    

    【讨论】:

    • 感谢您的意见。但是,如果标签包含在 cdata 中,我还有另一个问题。我怎样才能对 html 标签进行模板匹配?鉴于我无法控制 xml 文档。
    【解决方案3】:

    XML 应该包含小于号 (<) 的转义序列,而不是文字

    在 XSLT 中,您可以像这样生成该序列:

    <xsl:text>&amp;lt;<xsl:text>
    

    【讨论】:

    • 但我认为这是使用 xsl 硬编码 '
    猜你喜欢
    • 1970-01-01
    • 2016-04-11
    • 2018-12-14
    • 2021-05-24
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多