2012-01-19 118 views
3

我有一個輸入的xml:XSL換每個節點比較

<ResultSet1> 
    <set uid="80301707"/> 
    <set uid="80301703"/> 
    <set uid="80301705"/> 
</ResultSet1> 

<ResultSet2> 
    <set itemNumber="80301707"> 
     <item>item2</item> 
    </set> 
    <set itemNumber="80301703"> 
     <item>item2</item> 
    </set> 
</ResultSet2> 

我需要比較的/ResultSet1/[email protected]for-each/ResultSet2/[email protected]for-each。如果找到匹配項,則需要選擇/ResultSet2/set/item的值

回答

1

假定<root/>輸入XML :)節點

<root> 
    <ResultSet1> 
    <set uid="80301707"/> 
    <set uid="80301703"/> 
    <set uid="80301705"/> 
    </ResultSet1> 

    <ResultSet2> 
    <set itemNumber="80301707"> 
     <item>item1</item> 
    </set> 
    <set itemNumber="80301703"> 
     <item>item2</item> 
    </set> 
    <set itemNumber="80301704"> 
     <item>item3</item> 
    </set> 
    </ResultSet2> 
</root> 

XSLT代碼:

<xsl:template match="/root"> 
    <xsl:for-each select="ResultSet1"> 
     <xsl:for-each select="../ResultSet2/set[@itemNumber=//set/@uid]/item"> 
      <!--Do whatever you wish :) --> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
     </xsl:for-each> 
    </xsl:for-each> 
    </xsl:template> 

對於當前的XSL代碼:這將是輸出:

<item>item1</item> 
<item>item2</item> 

希望幫助:)
lemme知道是否有任何疑問

1

如果您的意思是在set1中有一個節點與set2中的某個節點相匹配的情況下找到匹配項,那麼它將內置到XPath中。 (CFR)。 http://www.w3.org/TR/xpath/#booleans

<xsl:for-each select="/ResultSet2/set/item[../@itemNumber = /ResultSet1/set/@uid]"> 
... 
</xsl:for-each> 

我還沒有測試過它。

+0

但我的輸出基本上是每個ResultSet1。因此,如果在它內部使用該邏輯,即, ... 我收到項目即CONCAT,<> item2item2 – Arun

+0

明白了上班。使用模板並使用for-each,如果在其中。 – Arun

+0

是的,它可能是'xslt:if'中的'test'。不知道背景。 – lkuty

3

下面是一個完整,推式溶液(無<xsl:for-each>使用):

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="ResultSet2/set[@itemNumber = /*/ResultSet1/set/@uid]"> 
    <xsl:copy-of select="*"/> 
</xsl:template> 
<xsl:template match="text()"/> 
</xsl:stylesheet> 

當這個變換所提供的XML文檔施加:

<root> 
    <ResultSet1> 
     <set uid="80301707"/> 
     <set uid="80301703"/> 
     <set uid="80301705"/> 
    </ResultSet1> 
    <ResultSet2> 
     <set itemNumber="80301707"> 
      <item>item1</item> 
     </set> 
     <set itemNumber="80301703"> 
      <item>item2</item> 
     </set> 
     <set itemNumber="80301704"> 
      <item>item3</item> 
     </set> 
    </ResultSet2> 
</root> 

的想要產生正確的結果

<item>item1</item> 
<item>item2</item>