我工作的一個項目,我有一些XML輸入轉換爲一些XML輸出,爲此我使用XSLT版本1XPath表達式來選擇唯一的節點
輸入XML文件我m的工作是巨大的像10k +行,但我已經花了一小時的更多時間把它燒到下面的代碼片段,這就解決了這個問題。
這是輸入XML
<QueryInput >
<Subject>
<Content>
<MunicipalityCode>0217</MunicipalityCode>
</Content>
</Subject>
<QueryResultStep>
<Multistep>
<IterationResponse>
<QueryResult>
<Kommune>0217</Kommune>
</QueryResult>
</IterationResponse>
<IterationResponse>
<QueryResult>
<Kommune>0217</Kommune>
</QueryResult>
</IterationResponse>
<IterationResponse>
<QueryResult>
<Kommune>0223</Kommune>
</QueryResult>
</IterationResponse>
<IterationResponse>
<QueryResult>
<Kommune>0223</Kommune>
</QueryResult>
</IterationResponse>
</Multistep>
</QueryResultStep>
</QueryInput>
輸出XML應包含每個 「Kommune」 一次,刪除重複。爲此,我製作了以下XSLT代碼。
<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="xsl xsi xsd">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<QueryResult>
<xsl:variable name="something">
<KommuneCollection>
<xsl:for-each select="QueryInput/QueryResultStep/Multistep/IterationResponse/QueryResult/Kommune[not(.=preceding::*)]">
<NewKommune>
<xsl:value-of select="."/>
</NewKommune>
</xsl:for-each>
</KommuneCollection>
</xsl:variable>
<xsl:copy-of select="$something"/>
</QueryResult>
</xsl:template>
</xsl:transform>
將會產生以下的(幾乎是正確的)輸出:
<KommuneCollection>
<NewKommune>0223</NewKommune>
</KommuneCollection>
但應該產生
<KommuneCollection>
<NewKommune>0217</NewKommune>
<NewKommune>0223</NewKommune>
</KommuneCollection>
如果我在輸入XML刪除<MunicipalityCode>0217</MunicipalityCode>
,突然它的工作原理的 - 但我真的不明白爲什麼。不是爲什麼會發生,我也不知道如何解決這個問題。任何幫助是極大的讚賞!
編輯:通過將輸入XML複製到Notepad ++,安裝XPathenizer工具,顯示窗口並輸入此XPath表達式QueryInput/QueryResultStep/Multistep/IterationResponse/QueryResult/Kommune[not(.=preceding::*)]
並執行表達式,可以輕鬆地複製該問題。結果可以在右側看到。我懷疑問題在於XSLT中的for-each
標記中使用的XPath表達式。
參見XSLT 1.0分組標準文章:http://www.jenitennison.com/xslt/grouping/muenchian.html –