我正在为 xml 编写 xsl,但我被困&
在我的 xml 中。它显示错误,如A semi colon character was expected. Error processing resource..
.
现在我希望全部&
替换为&
. 这样它就不会显示任何错误。
我怎样才能做到这一点?
有没有其他方法可以解决这个问题?
XSL 不可能——它只对格式良好的 XML 输入进行操作。
您需要使用一些搜索和替换功能,例如 sed:
sed -i 's:&:&:' yourfile.xml
甚至更好:
sed -i 's:&:&:g;s:amp;amp;:amp;:g;' yourfile.xml
这会阻止您替换正确的实体引用。
所以这里有一个答案。将 $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="&">
<xsl:matching-substring><xsl:text>&</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 不是完成这项工作的最佳工具(仅仅因为你只有一把锤子并不意味着你应该把所有东西都当作钉子)。