1

我正在为 xml 编写 xsl,但我被困&在我的 xml 中。它显示错误,如A semi colon character was expected. Error processing resource...

现在我希望全部&替换为&. 这样它就不会显示任何错误。

我怎样才能做到这一点?

有没有其他方法可以解决这个问题?

4

2 回答 2

1

XSL 不可能——它只对格式良好的 XML 输入进行操作。

您需要使用一些搜索和替换功能,例如 sed:

sed -i 's:&:&:' yourfile.xml 

甚至更好:

sed -i 's:&:&:g;s:amp;amp;:amp;:g;' yourfile.xml

这会阻止您替换正确的实体引用。

于 2012-11-27T09:29:23.587 回答
1

所以这里有一个答案。将 $input 参数替换为您的输入文件。针对任何有效的 XML 文件运行 - 而不是您的输入文件作为输入 - 脚本将忽略它。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
  exclude-result-prefixes="xs xd"
  version="2.0">

  <xsl:param name="input" select="'file:/U:/input.txt'"/>

  <xsl:template match="/">
    <result>
    <xsl:analyze-string select="unparsed-text($input)" regex="&amp;">
      <xsl:matching-substring><xsl:text>&amp;</xsl:text></xsl:matching-substring>
      <xsl:non-matching-substring><xsl:copy-of select="."></xsl:copy-of></xsl:non-matching-substring>
    </xsl:analyze-string>
    </result>
  </xsl:template>

</xsl:stylesheet>

PS - 我将此作为概念证明,而不是针对您的潜在问题的建议解决方案。XSLT 不是完成这项工作的最佳工具(仅仅因为你只有一把锤子并不意味着你应该把所有东西都当作钉子)。

于 2012-11-27T09:34:17.093 回答