0

我需要将 xml/html 文件转换为 dita 文件。我想删除一些节点但保留他们的孩子。困难在于:

  1. 我要删除的节点具有属性。我得到错误:

    不能在包含元素的子元素之后创建属性节点(类)

  2. 而这些属性是不可预知的:我要移除各种节点,我无法预测它们有哪些属性。

  3. 我不知道节点嵌套的深度。它可能是其他节点的直接子节点,也<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>

任何帮助表示赞赏!谢谢!

4

1 回答 1

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元素的属性中得到任何错误,因为它们没有被处理。

如果您想处理它们以将它们添加到不同的元素,那么您需要向我们展示您想要放置它们的确切位置。

于 2013-06-13T08:56:17.837 回答