Xml 具有特定值的节点上每个调用模板的XSL

Xml 具有特定值的节点上每个调用模板的XSL,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,具有如下XML结构: <ContextDoc> <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <OrderForms> <OrderForm> <Shipments> <Shipment&g

具有如下XML结构:

<ContextDoc>
  <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <OrderForms>
      <OrderForm>
        <Shipments>
          <Shipment>
            ...
            <ShippingMethodId>17995798-a2cc-43ad-81e8-bb932f6827e4</ShippingMethodId>
            ...
          </Shipment>
          <Shipment>
            ...
            <ShippingMethodId>11223344-a2cc-11bc-25a7-aa345f6827e6</ShippingMethodId>
            ...
          </Shipment>
        </Shipments>
        <LineItems>
          <LineItem>
            ...
            <ShippingMethodId>17995798-a2cc-43ad-81e8-bb932f6827e4</ShippingMethodId>
            ...
          </LineItem>
          <LineItem>
            ...
            <ShippingMethodId>17995798-a2cc-43ad-81e8-bb932f6827e4</ShippingMethodId>
            ...
          </LineItem>
          <LineItem>
            ...
            <ShippingMethodId>11223344-a2cc-11bc-25a7-aa345f6827e6</ShippingMethodId>
            ...
          </LineItem>
        </LineItems>
      </OrderForm>
    </OrderForms>
  </PurchaseOrder>
</ContextDoc>

...
17995798-a2cc-43ad-81e8-bb932f6827e4
...
...
11223344-a2cc-11bc-25a7-aa345f6827e6
...
...
17995798-a2cc-43ad-81e8-bb932f6827e4
...
...
17995798-a2cc-43ad-81e8-bb932f6827e4
...
...
11223344-a2cc-11bc-25a7-aa345f6827e6
...
从匹配每个装运节点的模板中,我希望使用当前ShippingMethodId循环行项目。像这样:

<xsl:template match="Shipment">
    <xsl:for-each select="//LineItems/LineItem[ShippingMethodId=./ShippingMethodId]">
      <xsl:call-template name="LineItem">
      </xsl:call-template>
    </xsl:for-each>
</xsl:Template>

但这给了我每批货下的所有行项目。为特定LineItem节点调用模板的正确方法是什么?

用于指向循环外部的上下文。循环中的
指向lopp的当前元素的上下文。像这样:

<xsl:for-each select="//LineItems/LineItem[ShippingMethodId=current()/ShippingMethodId]">

而且,感觉上,您可以通过“匹配”完成所有需要的操作,而无需调用类似于函数的模板。给我们多一点关于你想要完成的事情的想法,我们可能会推荐一种更具意识形态的方式来实现。例如,如果需要按那些
ShippingMethodId
s进行分组,则可以使用。

使用指向循环外部的上下文。循环中的
指向lopp的当前元素的上下文。像这样:

<xsl:for-each select="//LineItems/LineItem[ShippingMethodId=current()/ShippingMethodId]">

而且,感觉上,您可以通过“匹配”完成所有需要的操作,而无需调用类似于函数的模板。给我们多一点关于你想要完成的事情的想法,我们可能会推荐一种更具意识形态的方式来实现。例如,如果需要按照那些
ShippingMethodId
s进行分组,则可以使用