2

XSLT 1.0では、このxml要素を処理するための最良の方法は何ですか

<Product>This is a product. &lt; and its price is < 10</Product>

'より小さい記号'が2回表されていることに注意してください。すなわちとして'&lt;' and '<'.

<キャラクターを脱出するために私はこれを行うことができます

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="html" indent="yes" />
<xsl:template match="/">
  <html>
  <body>
    <table border="1">
      <tr>
        <th>Product</th>
      </tr>
      <tr>
        <td><xsl:value-of select="Product" disable-output-escaping="yes" /></td>
      </tr>
    </table> 
  </body>
  </html>
</xsl:template>

</xsl:stylesheet> 
  • disable-output-escapingを「yes」に設定すると、<文字は正しく表示されますが、"&lt;"完全に削除されます。
  • disable-output-escapingを「no」に設定すると、<文字によって解析例外が発生します。

両方を許可するにはどうすればよいですか?

4

3 に答える 3

3

全体として、XSLT 1.0で入力を処理する最良の方法は、他のツールを使用して入力をXMLに変換し、それを通常どおりに処理することだと思います。非XML入力に直面したときのXSLTプロセッサの動作は不安定になる傾向があります。

于 2013-03-06T21:40:56.540 に答える
1

簡単な答えは(他の人がほのめかしているが直接言っていないように!)、入力はXMLではないということです。XSLTはその入力に対しては機能しません。前処理するか、 XMLのように見えるものではなく、実際のXMLを生成するように、システムが生成しているものを修正する必要があります。

于 2013-03-07T09:07:16.407 に答える
0

disable-output-escaping="yes"最初のアプローチ ( ) が唯一の方法だと思います。そうしないと、エラーが発生し、そのように進むことはできません。

エンティティの解決を防ぐ(またはパッチを当てる)方法を理解する必要があります(&lt;解決されて置き換えられます)。

于 2013-03-06T21:37:23.780 に答える