0

次の (例) XML を処理しています。

<?xml version="1.0"?>
<root>&amp; &amp; &amp;</root>

次の (例) XSL を介して:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0">
  <xsl:output
    method="html"
    version="4.0"
    encoding="UTF-8"
    omit-xml-declaration="yes"
    />
  <xsl:template match="/">
    <input value="{/root}" />
  </xsl:template>
</xsl:stylesheet>

Python とlxml( libxslt-1.1.17) を使用すると、次の出力が得られます。

<input value="&amp;amp; &amp;amp; &amp;amp;" />

次のテンプレートを使用してこれを回避できることを理解しています。

  <xsl:template match="/">
    <input>
      <xsl:attribute name="value">
        <xsl:value-of 
          select="/root" 
          disable-output-escaping="yes" 
          />
      </xsl:attribute>
    </input>
  </xsl:template>

しかし、それは多くのタイピングです。PHP 内で XSL を使用したことがありますが、短い形式のvalue-of. 上記のすべてを入力し続ける必要がないように、これに対する簡単な修正はありますか?

4

1 に答える 1

1

実際、DOE はそのような場合のために設計されています。申し訳ありませんが、それを知っていれば、連続するだけです。

http://www.w3.org/TR/xslt#disable-output-escaping

通常、xml 出力メソッドは、テキスト ノードを出力するときに & と < (および場合によってはその他の文字) をエスケープします。これにより、出力が整形式の XML になります。ただし、整形式ではないが整形式の XML に近い出力を生成できると便利な場合があります。たとえば、出力には、後続の非 XML 認識プロセスによって適切な形式の XML に変換されることを意図した形式の悪いセクションが含まれる場合があります。このため、XSLT は出力エスケープを無効にするメカニズムを提供します。xsl:value-of または xsl:text 要素には、disable-output-escaping 属性がある場合があります...

本当の苦痛は、属性値の式で DOE を使用できない{disable-output-escaping(root)}ことだと思います。

したがって、これを短縮する方法は考えられません。

于 2010-12-13T12:18:19.597 に答える