【问题标题】:XSLT 1 - How can I replace '&' with '&' in XML file?XSLT 1 - 如何在 XML 文件中将 '&' 替换为 '&'?
【发布时间】:2017-02-07 17:10:41
【问题描述】:

我需要使用 XSLT 1 找到解决方案!大多数发送的 XML 文件格式正确,有人通过添加字符 (& ...) 来弄乱。有什么办法可以在我这边替换这个吗?我尝试了 XSLT 2 并且替换功能不起作用,因为我使用 Microsoft 的 XSLT 处理器

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:saxon="http://saxon.sf.net/"
  exclude-result-prefixes="xs saxon"
  version="2.0">
<xsl:param name="path" select="'file:///E:/foo.xml'"></xsl:param>
<xsl:template match="/">
<xsl:copy-of select="unparsed-text($path)"></xsl:copy-of>
<xsl:copy-of select="saxon:parse(replace(unparsed-text($path), '&amp;',      '&amp;amp;'))"/>
</xsl:template>
</xsl:stylesheet>

如何解决此问题的任何其他建议。例如,我输入了 XML 文件,例如:

  <?xml version="1.0" encoding="UTF-8"?>
  <name>Stack & Exchange</name>

并且在 '&' 字符上失败。

请指教! 谢谢

【问题讨论】:

  • 这有什么问题?
  • replace() 函数可以替换为递归命名模板。但是,如果您的输入不是 XML,那么您根本无法使用 XSLT 1.0 处理器对其进行转换。 XSLT 1.0 中没有unparsed-text()
  • 输入的 xml 无效 将它传递给您的人不能声称提供 xml - 解决这个问题。
  • Stefan,我知道这是无效的!这是我的解决方案,如何验证和修复格式不正确的 XML 文件...在收到的 XML 文件中,将 '&' 替换为 &
  • @Darius XSLT 1.0 做不到;寻找其他工具(例如文本编辑器)。

标签: xslt-1.0


【解决方案1】:

结论

两个观察结果

  • XSLT 至少需要输入格式良好的 XML 文档,所以我不能用它来纠正无效的 XML (它是一种 XML 转换语言)
  • 为了在输入时使用替换或转义 XML 的无效字符,我需要确保使用 XSLT 2.0 处理器 (我使用 Microsoft 处理器 XSLT 1.0)

我看到两个选项

  • 如果我收到输入错误,请手动调查和验证,然后发回错误消息。 - 这是我试图避免的! (使用 notepad++、excel 等文本工具查找问题)。
  • 用 .net 语言编写一个更正解析器,以便在加载为 XML 之前进行修复

【讨论】:

    猜你喜欢
    • 2020-11-22
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多