1

我正在尝试使用单个 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 元素是不可见的。

我知道我可以使用两次传递(两次转换),但我真的很想尝试在一个文件中执行此操作。

4

1 回答 1

2

尝试将您的parentUID元素更改为:

  <xsl:element name="ParentUID">
    <xsl:value-of select="generate-id(parent::Parent)"/>
  </xsl:element>

您还可以删除xsl:element

  <ParentUID><xsl:value-of select="generate-id(parent::Parent)"/></ParentUID>
于 2010-09-02T04:59:15.247 回答