使用xslt

时间:2015-12-16 12:38:24

标签: xslt

以下是我拥有的原始XML, 因此,需要捕获每个资产及其父母。

例如资产002515及其父母和002519及其父母

<businessobjects>
    <AssetID>
        <Code>002515</Code>
        <DependentAsset>
            <Code>002519</Code>
        </DependentAsset>
    </AssetID>
    <AssetID>
        <Code>002516</Code>
        <DependentAsset>
            <Code>002519</Code>
        </DependentAsset>
    </AssetID>
    <AssetID>
        <Code>002519</Code>
    </AssetID>
</businessobjects>

期望的输出:

    <businessobjects>
        <Assets>
             <Code>002519</Code>
             <Parent_Asset>002515</Parent_Asset>
             <Parent_Asset>002516</Parent_Asset>
        </Assets>
    </businessobjects>

使用的XSLT:

<xsl:key name="Dependent" match="businessobjects/AssetID/DependentAsset"        use="AssetID/Code" />
<xsl:template match="/document">
<businessobjects>
<xsl:for-each select="businessobjects/AssetID">
<Assets>
<Code><xsl:value-of select="child::Code[1]"/></Code>
<Parent_Asset>
<xsl:value-of select="key('Dependent', Code)/../Code" />
</Parent_Asset>
</Assets>
</businessobjects>

资产代码002519给出了所需的输出(因为它有两个父母,我只能得到其中一个)

但鉴于上述情况,我无法获取所有父母的详细信息,例如: 002519有两个父母,但我只能得到一个。有人可以帮助如何让两个父母。

1 个答案:

答案 0 :(得分:1)

以这种方式试试吗?

<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:key name="parent" match="AssetID" use="DependentAsset/Code" />

<xsl:template match="/businessobjects">
    <businessobjects>
        <xsl:for-each select="AssetID">
            <Assets>
                <xsl:copy-of select="Code"/>
                <xsl:for-each select="key('parent', Code)">
                    <Parent_Asset>
                        <xsl:value-of select="Code"/>
                    </Parent_Asset>
                </xsl:for-each>
            </Assets>
            </xsl:for-each>
    </businessobjects>
</xsl:template>

</xsl:stylesheet>

应用于您的输入示例,结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<businessobjects>
   <Assets>
      <Code>002515</Code>
   </Assets>
   <Assets>
      <Code>002516</Code>
   </Assets>
   <Assets>
      <Code>002519</Code>
      <Parent_Asset>002515</Parent_Asset>
      <Parent_Asset>002516</Parent_Asset>
   </Assets>
</businessobjects>

请注意,这假设每个DependentAsset都有一个({1}}个人(和唯一)条目。