问题与我之前的问题非常类似(如何将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>
这次我想解开一个名为“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>
子项及其父项的选择是硬编码(参数/参数)并基于属性名称(问题)
答案 0 :(得分: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>