私はlibxslt(xsltprocコマンド)を使用してXML文書を別のXMLに変換しています。XSLT 1.0数値参照を使用してXMLエスケープ文字を出力する
出力でXMLエスケープ文字の数値参照を使用するようにlibxsltに簡単な方法があるかどうかは疑問です(&
の場合は&
など)。 出力を消費するアプリケーションが定義済みのエンティティ(&
)を理解していないが、数値の文字参照を理解しているからです。
これを達成するための複雑な方法がいくつかあると私は理解していますが、単純なスタイルシートの指示やコマンドラインオプションがないと思っています。そうでない場合は、消費アプリケーションを変更する方が意味があります。
は、例を挙げると、入力XMLは次のとおりです。<?xml version="1.0" encoding="UTF-8"?>
<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<B>< > " & '</B>
<B>< > " & '</B>
</A>
XSLは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:apply-templates select="/A/B" />
</xsl:template>
<xsl:template match="B">
<X><xsl:attribute name="ATTR"><xsl:value-of select="." /></xsl:attribute></X>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
結果は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<X ATTR="< > " & '"/>
<X ATTR="< > " & '"/>
私が希望した後だ結果be:
<?xml version="1.0" encoding="UTF-8"?>
<X ATTR="< > " & '"/>
<X ATTR="< > " & '"/>
私はスタイルシートの前に、次を追加してみました:
<!DOCTYPE xsl:stylesheet [
<!ENTITY amp "&">
]>
または
<!ENTITY amp "&#38;">
をしかし、それは動作しませんでした(すなわち、結果はエンティティ定義の有無にかかわらず同じです)。
character-map
は、XSLT 1.0では使用できないため、オプションではないことも理解できます。