0

这个问题与我之前的问题非常相似(如何将 xml root 拆分为两个分支 - 除了第一个分支中的特定子项和第二个分支中的特定子项之外的所有子项)。

和以前一样,我有一个文件:

<config width="100" height="200">
    <parameter name="account number" country="UK">
        12345678901234567890123456
    </parameter>
    <parameter name="client code" codeType="xa">
        UK0112
    </parameter>
    <parameter name="email-address" accepts="yes">
        john.sparrow@rex.co.uk
    </parameter>
    <parameter name="postal-code" country="UK">
        W1A 1HQ
    </parameter>
    <parameter name="additional parameters" mode="on">
        <parameter name="preferences" type="internal">
            Not applicable
        </parameter>
        <parameter name="issues" type="internal" category="normal">
            None
        </parameter>
        <parameter name="complaints" type="internal">
            None
        </parameter>
        <parameter name="approbation" type="external">
            X11
        </parameter>
    </parameter>
</config>

这次我想解开一个名为“问题”的任意子节点并将其放入单独的分支中并保留每个节点的所有属性(例如宽度、高度或任何可能存在的附加值,例如颜色) - 解决方案是由 ABach 提供(谢谢)。现在不同的是我想在将节点移动到单独的分支之前删除属性类别

<configs>
    <config width="100" height="200">
        <parameter name="account number" country="UK">
            12345678901234567890123456
        </parameter>
        <parameter name="client code" codeType="xa">
            UK0112
        </parameter>
        <parameter name="email-address" accepts="yes">
            john.sparrow@rex.co.uk
        </parameter>
        <parameter name="postal-code" country="UK">
            W1A 1HQ
        </parameter>
        <parameter name="additional parameters" mode="on">
            <parameter name="preferences" type="internal">
                Not applicable
            </parameter>
            <parameter name="complaints" type="internal">
                None
            </parameter>
            <parameter name="approbation" type="external">
                X11
            </parameter>
        </parameter>
    </config>
    <config width="100" height="200">
        <parameter name="issues" type="internal">
                None
        </parameter>
    </config>
<configs>

子项及其父项的选择是硬编码的(参数/参数)并基于属性名称(问题)

4

1 回答 1

0

这个怎么样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
  <xsl:strip-space elements="*" />

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="/">
    <configs>
      <xsl:apply-templates />
    </configs>
  </xsl:template>

  <xsl:template match="config[parameter/parameter/@name = 'issues']">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
    <xsl:copy>
      <xsl:apply-templates select="@*" />
      <xsl:apply-templates 
           select="parameter/parameter[@name = 'issues']"
           mode="extract" />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="parameter/parameter[@name = 'issues']" />

  <xsl:template match="*" mode="extract">
    <xsl:copy>
      <xsl:apply-templates select="@*[local-name() != 'category'] | node()" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

当应用于您的样本输入时,结果是:

<configs>
  <config width="100" height="200">
    <parameter name="account number" country="UK">
      12345678901234567890123456
    </parameter>
    <parameter name="client code" codeType="xa">
      UK0112
    </parameter>
    <parameter name="email-address" accepts="yes">
      john.sparrow@rex.co.uk
    </parameter>
    <parameter name="postal-code" country="UK">
      W1A 1HQ
    </parameter>
    <parameter name="additional parameters" mode="on">
      <parameter name="preferences" type="internal">
        Not applicable
      </parameter>
      <parameter name="complaints" type="internal">
        None
      </parameter>
      <parameter name="approbation" type="external">
        X11
      </parameter>
    </parameter>
  </config>
  <config width="100" height="200">
    <parameter name="issues" type="internal">
      None
    </parameter>
  </config>
</configs>
于 2013-04-24T11:40:18.793 回答