在XSLT 2.0中用<br/>替换<br/>

时间:2016-09-07 16:16:23

标签: xslt xslt-2.0

这个问题很明显被多次询问,但我找不到任何帮助。

我想替换所有

<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>

不幸的是Saxon退出了

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.

我试图逃避&#34; \&#34;但是我无法做到。

有什么想法吗?

3 个答案:

答案 0 :(得分: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上的一个薄层。

答案 2 :(得分:0)

如果将output属性设置为HTML,将生成不带斜杠的<br>标记。

但是,如果将output属性设置为XML,变换器将自动关闭空标记,因此请使用:

<xsl:output method="xml"/>