我需要将xml / html文件转换为dita文件。我想删除一些节点但保留他们的孩子。困难是:
我要删除的节点有属性。我收到错误:
在子节点之后无法创建属性节点(类) 包含元素
这些属性是不可预测的:我想删除各种节点,我无法预测它们具有哪种属性。
我不知道节点嵌入的深度。它可以是<body>
的直接子节点,也可以在其他节点内嵌套4或5级。
XML示例:
<macro name="section">
<rich-text-body>
<macro name="column">
<parameter name="width">80%</parameter>
<rich-text-body>
<p>horribly nested, <span>bulky</span> structure</p>
<div>horribly nested, <span>bulky</span> structure</div>
</rich-text-body>
</macro>
</rich-text-body>
</macro>
我想删除庞大的宏标记,但只保留最内层<rich-text-body>
的子项。在这种情况下,它们是<p>
<div>
标记。
这是我得到的。 XSLT
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="macro[@name='column' and parameter[@name='width'] ='80%']">
<xsl:apply-templates select="node()|@*"/>
</xsl:template>
任何帮助表示赞赏!谢谢!
答案 0 :(得分:1)
正如已经建议的那样,如果你改变了
<xsl:template match="macro[@name='column' and parameter[@name='width'] ='80%']">
<xsl:apply-templates select="node()|@*"/>
</xsl:template>
到
<xsl:template match="macro[@name='column' and parameter[@name='width'] ='80%']">
<xsl:apply-templates select="node()"/>
</xsl:template>
分别相当但更短
<xsl:template match="macro[@name='column' and parameter[@name='width'] ='80%']">
<xsl:apply-templates/>
</xsl:template>
然后您不会从macro
元素的属性中获得任何错误,因为它们未被处理。
如果您想处理它们以将它们添加到其他元素,那么您需要准确地向我们展示您想要放置它们的位置。