2012-01-19 56 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>