在单遍中引用插入的元素
我正在尝试使用单个 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 元素插入到子项中时,插入到父项中的 UID 元素不可见。
我知道我可以使用两次传递(两次转换),但我真的很想尝试在一个文件中执行此操作。
I'm trying to insert unique IDs and references to those IDs using a single XSLT file.
Given the XML:
<Parent>
<Name>Dr Evil</Name>
<Child>
<Name>Scott Evil</Name>
</Child>
</Parent>
And this XSLT snippet after an identity transform:
<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>
I get the output:
<Parent>
<UID>XYZ123</UID>
<Name>Dr Evil</Name>
<Child>
<UID>ABC789</UID>
<ParentUID/> <-- expected <ParentUID>XYZ123</ParentUID>
<Name>Scott Evil</Name>
</Child>
</Parent>
In other words, the UID element being inserted into the Parent isn't visible when the ParentUID element is being inserted into the Child.
I know that I could use two passes (two transforms) but I'm really keen to try and do this in one file.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试将您的
parentUID
元素更改为:您还可以删除
xsl:element
:Try changing your
parentUID
element to:You can also remove the
xsl:element
: