我是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
请告诉我如何将上述内容限制为所需的结果层次结构。