从XML文件中仅选择一个节点

时间:2016-01-09 23:22:15

标签: xml xslt copy

我有一个XML文件,必须将其转换为另一个XML文件。 我不知道我应该做什么来只选择每个节点到第二个文件 (包含此节点包含的所有内容!)

  

< aaa> ......< / aaa>

     

< bbb> ......< / bbb>

     

< ccc> ......< / ccc>

     

< aaa> ......< / aaa>

     

< bbb> ......< / bbb>`

等等。 我只想复制第一个< aaa>,< bbb>。 我在XML文件中写了什么sholud?

1 个答案:

答案 0 :(得分:0)

基本上,这是一个分组问题。按项目名称对项目进行分组,并复制每个组中的第一项。

给出一个格式良好的输入,例如:

<强> XML

<root>
    <aaa>aaa1</aaa>
    <bbb>bbb1</bbb>
    <ccc>ccc1</ccc>
    <aaa>aaa2</aaa>
    <bbb>bbb2</bbb>`
    <ccc>ccc3</ccc>
    <aaa>aaa3</aaa>
    <bbb>bbb3</bbb>`
</root>

以下样式表:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/root">
    <xsl:copy>
        <xsl:for-each-group select="*" group-by="name()">
            <!-- Within the sequence constructor contained in the xsl:for-each-group element, the context item is the initial item of the relevant group. -->
            <xsl:copy-of select="."/>
        </xsl:for-each-group>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

将返回:

<强>结果

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <aaa>aaa1</aaa>
   <bbb>bbb1</bbb>
   <ccc>ccc1</ccc>
</root>