這基本上是一個分組的問題,要由Muenchian grouping解決(在XSLT 1.0)與(非常輕微的)的扭曲。然而,首先你的輸入必須有一個根元素 - 否則它不是一個XML文檔:
<root>
<Test>TestA::test1</Test>
<Test>TestA::test2</Test>
<Test>TestB::test3</Test>
<Test>TestB::test4</Test>
</root>
有了到位,下面的樣式表:
XSLT 1.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="k" match="Test" use="substring-before(., '::')" />
<xsl:template match="/">
<output>
<xsl:for-each select="root/Test[count(. | key('k', substring-before(., '::'))[1]) = 1]">
<Class id="{substring-before(., '::')}">
<xsl:for-each select="key('k', substring-before(., '::'))">
<Method id="{substring-after(., '::')}"/>
</xsl:for-each>
</Class>
</xsl:for-each>
</output>
</xsl:template>
</xsl:stylesheet>
會返回:
<?xml version="1.0" encoding="UTF-8"?>
<output>
<Class id="TestA">
<Method id="test1"/>
<Method id="test2"/>
</Class>
<Class id="TestB">
<Method id="test3"/>
<Method id="test4"/>
</Class>
</output>
這主要是*分組*問題(做一個搜索)。你在使用XSLT 1.0還是2.0? – 2014-09-19 14:12:20
謝謝你的提示!我必須使用XSLT 1.0來解決這個問題。 – mexl916 2014-09-19 14:16:16