我有一个使用包标识值在文档中引用其他节点的XML。 我想用当前节点的结果,然后找到包含文件中匹配的包标识另一节点的值。 在这种情况下,我想SourcePackage /包的价值或MaterialPackage /包或具有匹配的包标识值,在CompositionPackage / PackageTracks / TimelineTrack / TrackSegment / SourcePackageID发现了另一个CompositionPackage。
示例XML:
<AAG version="1.1">
<Preface>
<ContentStorage>
<SourcePackage>
<PackageTracks>
<TimelineTrack>
<TrackSegment>
<ComponentLength>5066</ComponentLength>
</TrackSegment>
</TimelineTrack>
</PackageTracks>
<PackageName>Name001</PackageName>
<PackageID>urn:44f70006</PackageID>
</SourcePackage>
<CompositionPackage>
<PackageTracks>
<TimelineTrack>
<TrackSegment>
<SourcePackageID>urn:44f70006</SourcePackageID>
<ComponentLength>10099</ComponentLength>
</TrackSegment>
</TimelineTrack>
</PackageTracks>
<PackageName>NameABC</PackageName>
<PackageID>urn:ce1904fd</PackageID>
</CompositionPackage>
<CompositionPackage>
<PackageTracks>
<TimelineTrack>
<TrackSegment>
<SourcePackageID>urn:00f70009</SourcePackageID>
<ComponentLength>222</ComponentLength>
</TrackSegment>
</TimelineTrack>
</PackageTracks>
<PackageName>NameABC</PackageName>
<PackageID>urn:ff1603fd</PackageID>
</CompositionPackage>
<CompositionPackage>
<PackageTracks>
<TimelineTrack>
<TrackSegment>
<SourcePackageID>urn:11f80008</SourcePackageID>
<ComponentLength>444</ComponentLength>
</TrackSegment>
</TimelineTrack>
</PackageTracks>
<PackageName>NameBCD</PackageName>
<PackageID>urn:gg1702fj</PackageID>
</CompositionPackage>
<CompositionPackage>
<PackageTracks>
<TimelineTrack>
<TrackSegment>
<SourcePackageID>urn:22f90009</SourcePackageID>
<ComponentLength>555</ComponentLength>
</TrackSegment>
</TimelineTrack>
</PackageTracks>
<PackageName>NameXYZ</PackageName>
<PackageID>urn:11f80008</PackageID>
</CompositionPackage>
<MaterialPackage>
<PackageTracks>
<TimelineTrack>
<TrackSegment>
<ComponentLength>864</ComponentLength>
</TrackSegment>
</TimelineTrack>
</PackageTracks>
<PackageName>Name002</PackageName>
<PackageID>urn:00f70009</PackageID>
</MaterialPackage>
</ContentStorage>
</Preface>
</AAG>
样品XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match = "AAG">
<Master>
<xsl:for-each select="AAG/Preface/ContentStorage">
<newnode>
<value1><xsl:value-of select ="CompositionPackage/PackageTracks/TimelineTrack/TrackSegment/ComponentLength"/></value1>
<value2><xsl:value-of select ="CompositionPackage/PackageTracks/TimelineTrack/TrackSegment/SourcePackageID"/></value2>
<value3><xsl:value-of select ="CompositionPackage/PackageTracks/TimelineTrack/TrackSegment[SourcePackageID=current()/MaterialPackage/PackageName"/></value3>
</newnode>
</xsl:for-each>
</Master>
</xsl:template>
</xsl:stylesheet>
预期的XML:
<Master>
<newnode>
<Value1>1099</Value1>
<Value2>urn:44f70006</Value2>
<Value3>Name001</Value3>
</newnode>
<newnode>
<Value1>222</Value1>
<Value2>urn:00f70009</Value2>
<Value3>Name002</Value3>
</newnode>
<newnode>
<Value1>444</Value1>
<Value2>urn:11f80008</Value2>
<Value3>NameXYZ</Value3>
</newnode>
<newnode>
<Value1>555</Value1>
<Value2>urn:22f90009</Value2>
<Value3></Value3>
</newnode>
</Master>
我目前的XSL是“回”的所有值3元。