我尝试将我的List Element从html转换为xml。 问题是List元素包含段落元素,有时第一个音符是Text。 我将使用apply-templates命令复制段落,并将第一个文本注释嵌套到p标记中。 所以问题是,第一个文本节点也可能包含内联标签,如a,span或img。 所以,我想我需要这样的东西。 如果第一个音符是文本音符,则将所有内容复制到下一个p标记到单独的p标记中。
这是我的源代码
<li> Text1<span>Text</span>Test<img src=".."><a>text</a>
<p>Text2</p>
</li>
它应该是这样的样子
<li>
<p>Text1<span>Text</span>Test<img src=".."><a>text</a></p>
<p>Text2</p>
</li>
我的xlst就是这个
<xsl:template match="li/text()">
<p>
<xsl:value-of select="."/>
</p>
</xsl:template>
这个xlst的结果是错误的
<li>
<p>Text1</p>
<span>Text</span>
<p>Test</p>
<img src=".."><a>text</a>
<p>Text2</p>
</li>
有可能这样做吗?
答案 0 :(得分:0)
所以,我想我需要这样的东西。如果第一个音符是文本音符,则将所有内容复制到下一个p标记到单独的p标记
尝试这样的事情:
<xsl:template match="li">
<xsl:variable name ="pn" select="p[1]/preceding-sibling::node()" />
<xsl:if test="$pn" >
<p>
<xsl:copy-of select="$pn"/>
</p>
</xsl:if>
<xsl:copy-of select="p[1]"/>
<xsl:copy-of select="p[1]/following-sibling::node()"/>
</xsl:template>
上述模板将第一个p
元素之前的所有内容复制到新的p
元素中,并复制剩余的节点(第一个p
及其后的所有内容)。