我是 XSLT 的新手,我花了好几个小时试图找出一个看似微不足道的问题的解决方案。
我有一个 xml 文档,其中包含这样的列表:
<Header>
<URLList>
<URLItem type="type1">
<URL></URL>
</URLItem>
<URLItem type="type2">
<URL>2</URL>
</URLItem>
</URLList>
</Header>
如果它不存在,我现在需要为每个 URLItem 添加一个“ID”元素。ID 元素的值必须是递增的值。
xml 最终应如下所示:
<Header>
<URLList>
<URLItem type="type1">
<ID>1</ID>
<URL></URL>
</URLItem>
<URLItem type="type2">
<ID>2</ID>
<URL>2</URL>
</URLItem>
</URLList>
</Header>
我一直在尝试各种事情,但无法使其正常工作。
例如,如果我尝试使用模板来匹配列表,我无法获得正确的增量值。ID 值是 [2,4],但不是应该的 [1,2]... 这是 xslt:
<xsl:template match="/Header/URLList/URLItem[not(child::ID)]">
<xsl:copy>
<ID> <xsl:value-of select="position()"/></ID>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
我也一直在尝试使用这样的 for-each 循环:
<xsl:template match="/Header/URLList">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
<xsl:for-each select="/Header/URLList/URLItem">
<xsl:if test="not(ID)">
<xsl:element name="ID"><xsl:value-of select="position()" /></xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:template>
这样我似乎得到了正确的增量,但新的 ID 元素出现在父节点上。我一直无法找到将它们附加为 URLItem 元素的子元素的方法。
非常感谢任何帮助。