XSLT嵌套到XML的平面结构(XSLT nested to flat structure of x

2019-10-20 07:17发布

使用XSLT我想从转换XML文档:

<element1>val1</element1>
<element2>
    <element3> value </element3>
    <element4> value </element4>
<element2>

以XML,如:

<element1>val1</element1>
<element3> value </element3>
<element4> value </element4>

我想删除<element2> ,因为它包含“儿童元素”和所有其他元素创建平的元素。

任何想法?

Answer 1:

下面的样式表将删除有孩子(除了根元素)的所有元素,只返回叶节点的“平坦”的文章:

XSLT 1.0

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

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

<xsl:template match="*/*[*]">
    <xsl:apply-templates select="*"/>
</xsl:template>

</xsl:stylesheet>

当施加到下面的测试输入

<world>
    <Europe>
        <Germany>
            <Berlin>no</Berlin>
            <Munich>yes</Munich>
        </Germany>
        <France>
            <Paris>no</Paris>
        </France>
        <Italy>
            <Rome>no</Rome>
            <Venice>yes</Venice>
            <Milano>no</Milano>
        </Italy>
    </Europe>
    <Asia>
        <China>
            <Beijin>no</Beijin>
            <Shanghai>yes</Shanghai>
        </China>
        <India>
            <Mumbay>no</Mumbay>
        </India>
    </Asia>
    <America>
        <USA>
            <NewYork>
                <NewYork>no</NewYork>
                <Albany>yes</Albany>
            </NewYork>
            <California>
                <LosAngeles>no</LosAngeles>
                <SanFranciso>no</SanFranciso>                       
            </California>
        </USA>
        <Canada>
            <Vancouver>no</Vancouver>
            <Montreal>yes</Montreal>
        </Canada>
        <Mexico>
            <Tijuana>no</Tijuana>
        </Mexico>
    </America>
</world>

结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<world>
   <Berlin>no</Berlin>
   <Munich>yes</Munich>
   <Paris>no</Paris>
   <Rome>no</Rome>
   <Venice>yes</Venice>
   <Milano>no</Milano>
   <Beijin>no</Beijin>
   <Shanghai>yes</Shanghai>
   <Mumbay>no</Mumbay>
   <NewYork>no</NewYork>
   <Albany>yes</Albany>
   <LosAngeles>no</LosAngeles>
   <SanFranciso>no</SanFranciso>
   <Vancouver>no</Vancouver>
   <Montreal>yes</Montreal>
   <Tijuana>no</Tijuana>
</world>


文章来源: XSLT nested to flat structure of xml
标签: xml xslt