实际上,因为我看到我可以添加名称空间。因为我非常接近输出,我希望看到。第一个代码:
XML:
<helptext>
<h6>General configuration options.</h6>
<h2>Changing not yet supported.</h2>
<p>this is a <b>paragraph</b><br/>this is a new line</p>
</helptext>
XSL:
<xsl:template name="transformHelptext">
<xsl:for-each select="./child::*">
<xsl:element name="ht:{local-name()}">
<xsl:choose>
<xsl:when test="count(./child::*)>0">
<xsl:call-template name="transformHelptext"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:for-each>
</xsl:template>
到目前为止一切顺利。 <h6>..</h6>
和<h2>...</h2>
行没有问题。
但第三行的子节点是<b>
。并且不知何故,“段落”是显示的唯一文本,对于此行。我在choose
陈述中有错误。但我无法理解。
由于
P.S:ht名称空间在xsl-stylesheet标签中定义,它是'xmlns:ht =“http://www.w3.org/1999/xhtml”'
P.S:我尝试做的是,可以在我的特定xml节点上应用html标签,样式
答案 0 :(得分:1)
也许是这样的事情:
<xsl:template name="transformHelptext">
<xsl:apply-templates select="@*|node()" />
</xsl:template>
<xsl:template match="*" >
<xsl:element name="ht:{local-name(.)}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*|text()" >
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
在“transformHelptext”模板中,选择所有属性和节点并将模板应用于它们。
第二个模板匹配元素节点并更改命名空间。第三个模板匹配属性和文本节点,只创建一个副本。
答案 1 :(得分:1)
输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<helptext>
<h6>General configuration options.</h6>
<h2>Changing not yet supported.</h2>
<p>this is a <b>paragraph</b><br/>this is a new line</p>
</helptext>
<强> XSLT:强>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*|@*">
<xsl:element name="ht:{local-name()}" namespace="http://www.w3.org/1999/xhtml">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
输出XML:
<?xml version="1.0" encoding="UTF-8"?>
<ht:helptext xmlns:ht="http://www.w3.org/1999/xhtml">
<ht:h6>General configuration options.</ht:h6>
<ht:h2>Changing not yet supported.</ht:h2>
<ht:p>
this is a
<ht:b>paragraph</ht:b>
<ht:br />
this is a new line
</ht:p>
</ht:helptext>
讨论:
尽可能避免使用<xsl:for-each>
,因为它会降低处理器的速度。