2016-09-07 14 views
1

質問は明らかに何度も尋ねられましたが、何の助けも見つかりませんでした。<br>をXSLT 2.0の<br/ >に置き換えてください。

私は

いくつかのノードで
<br /> 

にすべて

<br> 

を交換したいと思います。

XML

<paragraphs> 
    <paragraph><![CDATA[Lorem ipsum dolor sit amet, consetetur sadipscing elitr.<br>sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.<br>sed diam voluptua.<br>At vero eos et accusam et justo duo dolores et ea rebum.]]> 
    </paragraph> 
<paragraphs> 

XSL

<xsl:template match="paragraph"> 
    <paragraph> 
    <xsl:attribute name="type">public</xsl:attribute> 
    <xsl:value-of select="replace(., '\<br\>', '\<br /\>')"/> 
    </paragraph> 
</xsl:template> 

は残念ながらサクソンは、私が "\" でエスケープしようとしたが、それにもかかわらず、私はそれが権利を取得can''t

SXXP0003: Error reported by XML parser: The value of attribute "select" associated with an element type "null" must not contain the '<' character. org.xml.sax.SAXParseException: The value of attribute "select" associated with an element type "null" must not contain the '<' character. 

で終了します。

アイデア?

+5

を、私はあなたが '
と「XML」の入力として提示したものかと思います'マークアップがありますXSLTは通常、 '
'や'
'や'

'のみを持つことができますが、'
'ではないXML入力で動作することを考えると、 '
'だから、HTMLパーサでHTMLパーサを使用し、その入力をXSLTに供給しない限り、あなたの入力がXSLTでどのように処理されるかわかりません。その場合、変換の問題はありません。ツリー全体をXMLまたはXHTMLとしてシリアライズし、次に「
」を取得する必要があります。 –

+1

'replace()'関数はマークアップではなく文字列に対しても機能することにも注意してください。そして、 '<'文字をエスケープする方法は '\ <'ではなく '<'です。しかし、あなたの段落にエスケープされた改行が含まれていた場合にのみ関連します。 –

+0

あなたは間違いなく正しいです。私は忘れた。 – user1491184

答えて

1

はこのようにそれを試してみてください。

<xsl:template match="paragraph"> 
    <paragraph type="public"> 
     <xsl:value-of select="replace(., '&lt;br>', '&lt;br/>')"/> 
    </paragraph> 
</xsl:template> 

デモ:http://xsltransform.net/gWEamKU

+1

匿名のダウン者:あなたの理由を述べてください。 –

0

あなたが使用することはできません、そして、このためのXSLTを必要としませんが。 XHTMLを生成するエラー訂正HTMLパーサーが必要です(例えば、NekoHTML)。これはApache Xercesよりも薄いレイヤーです。

0

出力プロパティをHTMLに設定すると、<br>のスラッシュのないタグが生成されます。あなたがXMLに出力プロパティを設定している場合

しかし、変圧器はオートクローズ空のタグは、その使用します。

<xsl:output method="xml"/> 
+1

"トランスは空のタグを自動的に閉じます*"タグではないので、この場合はそうなりません。 –

関連する問題