将xml根目录拆分为两个分支-可以选择删除不需要的属性
这个问题与我的前一个问题非常相似(如何将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
<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
没有一个