我想要使用XSL包装文本节点并使用标签构建它们。 下面是一个样本。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<section>
<container>
aaa
<box>
book
</box>
bbb
<box>
pen
</box>
ccc
<superscript>
3
</superscript>
ddd
</container>
</section>
</root>
是否可以获得如下结果?
<div>
<p>aaa</p>
<div>book</div>
<p>bbb</p>
<div>pen</div>
<p>ccc<span>3</span>ddd</p>
</div>
如果你再帮助我,我很高兴!
答案 0 :(得分:2)
是否可以获得如下结果?
是。假设您从copy idiom开始,则可以添加以下内容:
<xsl:strip-space elements="*"/>
<!-- these we want to turn into a <div> and then process children -->
<xsl:template match="box | container | section | formula">
<div>
<xsl:apply-templates />
</div>
</xsl:template>
<!-- if text node but not directly inside <box> -->
<xsl:template match="text()[not(parent::box)]">
<p>
<xsl:value-of select="." />
</p>
</xsl:template>
<!-- any other text node as-is -->
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
注1:您的示例XML不是有效的XML,但我认为您的意思是</container>
,而不是</formula>
。
注2:复制习语会复制所有不匹配的内容。如果您不想这样,请将其更改为:
<!-- remove anything we do not need -->
<xsl:template match="node() | @*">
<xsl:apply-templates />
</xsl:template>
编辑:纠正了代码中的一些缺陷。它现在创建(添加空间以便于阅读)以下内容:
<div>
<div>
<p>aaa</p>
<div>book</div>
<p>bbb</p>
<div>pen</div>
<p>ccc</p>
</div>
</div>