我可以使用哪些代码替换<xsl:copy-of select="tag"/>
,当应用于以下xml时...
<tag>
content
<a>
b
</a>
</tag>
..会得到以下结果:?
content
<a>
b
</a>
我希望回应其中的所有内容,但不包括父标记
基本上我的xml文件中有几个部分内容,格式为html,分组为xml标签
我希望有条件地访问它们&amp;回应他们
例如:<xsl:copy-of select="description"/>
生成的额外父标记不会影响浏览器呈现,但它们是无效标记,&amp;我希望能够删除它们
我是以完全错误的方式解决这个问题吗?
答案 0 :(得分:12)
由于您还希望包含content
部分,因此您需要node()
函数,而不是*
运算符:
<xsl:copy-of select="tag/node()"/>
我在输入示例中对此进行了测试,结果是示例结果:
content
<a>
b
</a>
如果没有对根节点名称进行硬编码,则可以是:
<xsl:copy-of select="./node()" />
这在您已经处理根节点并且想要内部所有元素的精确副本(不包括根节点)的情况下非常有用。例如:
<xsl:variable name="head">
<xsl:copy-of select="document('head.html')" />
</xsl:variable>
<xsl:apply-templates select="$head" mode="head" />
<!-- ... later ... -->
<xsl:template match="head" mode="head">
<head>
<title>Title Tag</title>
<xsl:copy-of select="./node()" />
</head>
</xsl:template>
答案 1 :(得分:3)
补充了Welbog的答案,我的投票,我建议编写单独的模板,按照以下方式:
<xsl:template match="/">
<body>
<xsl:apply-templates select="description" />
</body>
</xsl:template>
<xsl:template match="description">
<div class="description">
<xsl:copy-of select="node()" />
</div>
</xsl:template>