【问题标题】:Handling special characters in xsl处理 xsl 中的特殊字符
【发布时间】:2012-11-14 23:24:03
【问题描述】:

我有一个 xml,其中包含一些特殊字符,例如 &whitespaces
我想在 xsl 中处理这些特殊字符。
如何处理 xsl 中的特殊字符?

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="cpdhtml.xsl"?>
<pmd-cpd>
    <duplication lines="72" tokens="75">
        <file line="632" path="M:\PBA0039 & Code\Common\ssc\src\Main.c"/>
        <file line="1802" path="M:\PBA0039 & Code\Common\ssc\src\link1.c"/>
    </duplication>
</pmd-cpd>

在这里您可以在path 中看到&amp;。转换 xml 时出错。
请帮我解决这个问题。

【问题讨论】:

  • 这不是格式良好的 XML,您需要在源代码中修复未转义的 &amp;,然后才能使用 XSLT 处理它。
  • @IanRoberts 这个 xml 是由一些工具生成的。例如,某些文件夹名称可能包含&amp;。那么如何将其替换为 '&'?
  • 该工具需要修复以生成格式良好的 XML。 XSL 无法对格式不正确的 XML 文件进行操作。
  • 好的...谢谢你的信息。
  • 在 XSLT 2.0 中,您可以将其作为常规文本(不是 xml)文件读取,并将所有出现的“&”替换为“&”。这会转义“&”字符并生成格式良好的 XML 文档的文本表示。然后您可以使用您的 XSLT 代码处理此 XML 文档。

标签: xml xslt special-characters


【解决方案1】:

如果 XML 文件无效,则不能使用 XSLT 转换它。要在您的 xml 中保留 excaping 字符,您可以在 XML 中使用 CDATA 部分。然后,您可以安全地使用 XSLT 来选择那些 CDATA。 查看以下关于如何使用 CDATA 来保持转义字符的帖子。

http://vvratha.blogspot.com/2012/11/extracting-cdata-section-using-xslt.html

【讨论】:

    【解决方案2】:

    我猜这些 XML 文件是由字符串连接生成的……否则你不可能得到未编码的 XML。

    摆脱特殊字符的唯一方法是使用任何编程语言,如 C#、VB.NET 并将文件加载为字符串。
    使用字符串操作操作..

    string.Replace("&","&amp;");
    

    根据 Flynn1179 的评论更新:

    如果您害怕遇到问题,您的 XML 已经编码了一些字符。然后再添加一行:

    string.Replace("&amp;amp;","&amp;");
    

    更好的解决方案是修改生成此类 XML 文件的代码..

    示例:使用 XML DOM 代替 String-concat

    【讨论】:

    • 你需要非常小心地这样做——如果文档包含一个很好的转义&amp;amp;amp;,你将错误地用&amp;amp;amp;替换它。您确实需要检查 &amp;amp; 的每次出现是否还不是 XML 实体的一部分。
    • @Flynn1179,我也想到了同样的想法..但用户也有可能希望在输出中显示&amp;amp;amp;!!
    • 所以真的不能确定用户在这里的要求是什么。如果他想摆脱这样的重复,那么他可以去string.Replace("&amp;amp;amp;","&amp;amp;");
    • 是的,但这只是越来越混乱。我经常看到非常混乱的“解决方法”来修复预先存在的代码的错误输出,在这种情况下,最好在数据来自的任何地方更正输出。不要误会我的意思,在这种情况下这是一个很好的答案,只是没有必要做这样的事情。
    • @Flynn1179,同意你的看法..!我讨厌这种通过使用字符串连接来生成 XML 的代码,即使我遇到过这种情况!我选择了代码,因为它是一个更好的解决方案.. 如果 OP 真的无能为力,这个答案是为了提供额外的解决方案..
    【解决方案3】:

    您需要escape them,就像在任何 XML 文档中一样。

    &amp;amp; 的转义符是 &amp;amp;

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="cpdhtml.xsl"?>
    <pmd-cpd>
        <duplication lines="72" tokens="75">
            <file line="632" path="M:\PBA0039 &amp; Code\Common\ssc\src\Main.c"/>
            <file line="1802" path="M:\PBA0039 &amp; Code\Common\ssc\src\link1.c"/>
        </duplication>
    </pmd-cpd>
    

    【讨论】:

    • 如何用 '&' 转义 '&'。我不能手动完成,只需要使用 xsl 来实现。
    • @SachinMhetre - 你的意思是 XML 有 &amp;amp; 这样的?那不是&amp;amp;?如果是这样它不是有效的 XML。您需要有效的 XML 才能使用 XSL。
    • 这个xml是由一些工具生成的。例如,某些文件夹名称可能包含&amp;amp;。那么如何将其替换为 '&'?
    • @SachinMhetre - 该工具正在生成无效的 XML。您需要修复该工具及其生成的无效 XML。 XSL不能用于此。
    • @SachinMhetre - 再一次。您没有 XML。该文件是不是有效的 XML。它没有很好地形成。 XSL 只能处理格式良好的 XML 文件。问题是 &amp;amp; 本身在 XML 文件中无效。
    猜你喜欢
    • 2015-06-11
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2012-09-18
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多