以下是我拥有的原始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有两个父母,但我只能得到一个。有人可以帮助如何让两个父母。
答案 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}}个人(和唯一)条目。