我正在尝试使用单个 XSLT 文件插入唯一 ID 和对这些 ID 的引用。
给定 XML:
<Parent>
<Name>Dr Evil</Name>
<Child>
<Name>Scott Evil</Name>
</Child>
</Parent>
身份转换后的这个 XSLT 片段:
<xsl:template match="Parent">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:element name="UID"><xsl:value-of select="generate-id(.)"/></xsl:element>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="Child">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:element name="UID"><xsl:value-of select="generate-id(.)"/></xsl:element>
<xsl:element name="ParentUID"><xsl:value-of select="../UID"/></xsl:element>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
我得到输出:
<Parent>
<UID>XYZ123</UID>
<Name>Dr Evil</Name>
<Child>
<UID>ABC789</UID>
<ParentUID/> <-- expected <ParentUID>XYZ123</ParentUID>
<Name>Scott Evil</Name>
</Child>
</Parent>
换句话说,当 ParentUID 元素被插入到 Child 中时,插入到 Parent 中的 UID 元素是不可见的。
我知道我可以使用两次传递(两次转换),但我真的很想尝试在一个文件中执行此操作。