在层次结构具有特定子项时查找唯一标记

时间:2015-08-03 11:03:09

标签: xml xslt xslt-1.0

我是XSL的新手,发现很难达到预期的结果。 我有以下XML结构

我的要求是,只有当<Member>层次结构中的关联<RuleBndryValue1>时,才会获取<Code> = Prod层次结构的所有唯一(通过XML)<result>标记。 <result>有一个名为<Resource>的孩子。

示例XML:

<Envelope>
    <Header>      
   <ID>bdde10f67983</ID>
    </Header>
   <Body>
  <findResponse >
     <result >
        <Rule>                                   
           <RuleBoundary1>                                 
              <RuleBndryValue1>                     
                 <Member>CS</Member>
                 <Code>CSize</Code>                     
              </RuleBndryValue1>
           </RuleBoundary1>               
        </Rule>
        </result>                
     <result >
        <Rule>        

           <RuleBoundary1>                                 
              <RuleBndryValue1>                     
                 <Member>RL</Member>                     
                 <Code>A2</Code>                     
              </RuleBndryValue1>
           </RuleBoundary1>               
           <RuleBoundary1>                                  
              <RuleBndryValue1>                                        
                 <Member>Ad</Member>                     
                 <Code>Prod</Code>                     
              </RuleBndryValue1>
              <RuleBndryValue1>                                     
                 <Member>Customer</Member>                     
                 <Code>Prod</Code>                     
              </RuleBndryValue1>
           </RuleBoundary1>
        </Rule>
        <Resource>
           <ResourceId>39</ResourceId>              
        </Resource>
     </result>       

     <result>
        <Rule>
           <RuleId>1388</RuleId>                              
           <RuleBoundary1>   

              <RuleBndryValue1>                     
                 <Member>XXX</Member>                     
                 <Code>TP</Code>                     
              </RuleBndryValue1>
           </RuleBoundary1>
           <RuleBoundary1>                 
              <RuleBndryValue1>                     
                 <Member>Ad</Member>                    
                 <Code>Prod</Code>                     
              </RuleBndryValue1>
              <RuleBndryValue1>                    
                 <Member>Customer</Member>                     
                 <Code>Prod</Code>                     
              </RuleBndryValue1>
           </RuleBoundary1>
        </Rule>
        <Resource>
           <ResourceId>05</ResourceId>               
        </Resource>
     </result>         
  </findsResponse>
</Body>
</Envelope>

XML将有多个层次结构<result>的实例。我的XSL代码提取所有<members>,但我无法弄清楚如何将其限制为只有那些<result>层次结构有一个<Resource>。因此,在XML中,<result>第一次出现时不符合标准。

XSL代码:

<xsl:variable name="Prods">
    <xsl:for-each select="//findResponse/result/Rule/RuleBoundary1/RuleBndryValue1">
        <xsl:if test="Code = 'Prod'">
            <xsl:if test="Member[not(preceding::ns2:Member/. = .)]">
                <xsl:value-of select="Member[not(preceding::ns2:Member/. = .)]"/>
                <xsl:text>|</xsl:text>
            </xsl:if>
        </xsl:if>
    </xsl:for-each>
</xsl:variable>

预期结果:

Ad|Customer

请告诉我如何将上述内容限制为所需的结果层次结构。

0 个答案:

没有答案