2016-09-14 6 views
0

XSLT 1.0:ASCII変換を避けるにはどうすればいいですか?私はこのようないくつかのタグを持つXMLファイルで

<foo>this is a &quot;test&quot;</foo> 

私はそれを処理する場合:this is a "test"

<xsl:value-of select="foo"/> 

私は出力として取得します。 (そのまま)私は戻って取得したいと思い何

は、変換/加工の任意の並べ替えなし

this is a &quot;test&quot; 

テキストです。

「処理」を行わないようにXSLT 1.0に問い合わせるにはどうすればよいですか?

私が試した:

<xsl:value-of disable-output-escaping="yes|no" /> 

を、それは動作しません。

解決策がある場合は、XSLTファイル内の<xsl:value-of />すべてに対して「デフォルト」として設定することはできますか?

+0

あなたが生産している出力のどのような種類に

<?xml version="1.0" encoding="UTF-8"?> <root> <foo>This is a &quot;test&quot;.</foo> <foo>This is another "test".</foo> </root> 

変換されhttp://xsltransform.net/bwdwrKを参照してください? ''? –

+0

同じように、何も変わっていないようです。 – Randomize

+0

これは私の質問に対する答えではありませんでした。 –

答えて

0

あなたがXML <foo>this is a &quot;test&quot;</foo>を持っている場合は、任意のXSLTプロセッサが使用するXMLパーサがエンティティが" Unicode文字に&quot;を参照し、XSLTプロセッサは意味、文字列値this is a "test"でテキスト子ノードを持つfoo要素ノードで動作します解析し、 XSLTプロセッサは、元のXMLがUnicode文字"を持っていたか、エンティティ参照&quot;を持っていたかどうかを知りません。

XMLを事前処理してエンティティ参照をXSLTが区別できるマークアップに変換する場合を除き、エンティティ参照を保持する方法はありません。http://andrewjwelch.com/lexev/をJavaの世界のオプションとして参照してください。

XSLT 2.0または3.0では、文字マップhttps://www.w3.org/TR/xslt20/#character-mapsを使用して、結果の引用文字をエンティティ参照にマップできます。ただし、入力からの実体参照は保持されません。代わりに、引用符文字を文字参照として出力します。

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

    <xsl:output use-character-maps="escape"/> 

    <xsl:character-map name="escape"> 
     <xsl:output-character character='"' string="&amp;quot;"/> 
    </xsl:character-map> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:transform> 

を行い、

<?xml version="1.0" encoding="UTF-8"?><root> 
    <foo>This is a &quot;test&quot;.</foo> 
    <foo>This is another &quot;test&quot;.</foo> 
</root> 
+0

残念ながら私はXSLT 1.0だけを使用できます – Randomize

+0

代わりに"を一重引用符で置き換えることはできますか? – Randomize

関連する問題