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 は、この仕事に最適なツールではありません (ハンマーしかないからといって、すべてを釘のように扱えというわけではありません)。