我是XSLT的新手,並花了數小時試圖找出似乎看起來很瑣碎的問題的解決方案。XSLT 2:將具有遞增值的元素添加到列表中
我有一個XML文檔,其中包含一個這樣的名單:
<Header>
<URLList>
<URLItem type="type1">
<URL></URL>
</URLItem>
<URLItem type="type2">
<URL>2</URL>
</URLItem>
</URLList>
</Header>
如果它不存在,我現在需要的「ID」元素添加到每個URLItem。 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-每個這樣的循環:
<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元素的子元素的方法。
任何幫助極大的讚賞。
原因你得到2,4,6而不是1,2,3是在xsl:應用模板元素(這你沒有向我們顯示)選擇空白文本節點以及元素。您可以通過僅選擇元素(select =「*」)或通過在開始使用xsl:strip-space之前剝離空白文本節點來避免這種情況。 –