【发布时间】:2014-02-06 11:01:44
【问题描述】:
我有以下 XML 文档
<body>
<h2>title</h2>
some text and a <a href="link">link</a> here.
</body>
我想使用 XSLT 将其转换为:
<body>
<h2>title</h2>
<p>some text and a <a href="link">link</a> here.</p>
</body>
因此我尝试了以下 XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="xml" cdata-section-elements="script"/>
<xsl:template match="/ | node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="body/text()" >
<p><xsl:copy/></p>
</xsl:template>
</xsl:stylesheet>
但这似乎并没有给出预期的结果(如果文本节点不包含锚元素,它可以正常工作)。那么关于如何使用 XSLT 完成此任务的任何想法? (稍后我确实可以选择使用 C# 解析 XML,但我最初的想法是使用 XSLT)
更新
为了使整体要求更加清晰,输入 XML(或实际上是 XHTML)不是固定的,它可以是任何东西,因为它是用户输入。真的,我唯一能期待的是,它将是有效的 XML (XHTML),并且某些行可能不会包含在 <p> 标记中。
【问题讨论】:
-
最终,我认为您无法避免指定需要自行处理的元素列表(body 的子代)(例如,您的示例中的
<h2>) ,或需要与周围的文本节点一起包装在<p>元素中的元素列表(body 的子元素)(例如,您的示例中的<a>)。 -
@michael.hor257k 是的,我已经意识到这不是一个简单的问题,因此我在这里问它的原因;)。顺便说一句,我们非常感谢您的所有帮助和建议。