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