将xml根目录拆分为两个分支-可以选择删除不需要的属性

将xml根目录拆分为两个分支-可以选择删除不需要的属性,xml,xslt,transform,transformation,Xml,Xslt,Transform,Transformation,这个问题与我的前一个问题非常相似(如何将xml根划分为两个分支——第一个分支中只有一个特定的子级,第二个分支中只有一个特定的子级) 如前所述,我有一个文件: <config width="100" height="200"> <parameter name="account number" country="UK"> 12345678901234567890123456 </parameter> <paramete

这个问题与我的前一个问题非常相似(如何将xml根划分为两个分支——第一个分支中只有一个特定的子级,第二个分支中只有一个特定的子级)

如前所述,我有一个文件:

<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>

12345678901234567890123456
UK0112
厕所。sparrow@rex.co.uk
W1A 1HQ
不适用
没有一个
没有一个
X11
这一次,我想解开一个名为“issues”的任意子节点,将其放在单独的分支中,并保留每个节点的所有属性(例如宽度、高度或可能存在的任何附加属性,例如颜色)-解决方案由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>

12345678901234567890123456
UK0112
厕所。sparrow@rex.co.uk
W1A 1HQ
不适用
没有一个
X11
没有一个
子级及其父级的选择是硬编码的(参数/参数),并基于属性名(问题)

这是怎么回事:

<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>

12345678901234567890123456
UK0112
厕所。sparrow@rex.co.uk
W1A 1HQ
不适用
没有一个
X11
没有一个