在XSLT中获取父元素

Vex*_*toR 8 xml xslt xpath

我有这样的XML:

<PurchaseOrder>
    <ID>1</ID>
    <PurchaseOrderLine>
        <DATA>100<DATA>
    </PurchaseOrderLine>
    <PurchaseOrderLine>
        <DATA>200<DATA>
    </PurchaseOrderLine>
    <PurchaseOrderLine>
        <DATA>300<DATA>
    </PurchaseOrderLine>
</PurchaseOrder>
<PurchaseOrder>
    <ID>2</ID>
    <PurchaseOrderLine>
        <DATA>100<DATA>
    </PurchaseOrderLine>
    <PurchaseOrderLine>
        <DATA>200<DATA>
    </PurchaseOrderLine>
    <PurchaseOrderLine>
        <DATA>300<DATA>
    </PurchaseOrderLine>
</PurchaseOrder>
<PurchaseOrder>
    <ID>3</ID>
    <PurchaseOrderLine>
        <DATA>100<DATA>
    </PurchaseOrderLine>
    <PurchaseOrderLine>
        <DATA>200<DATA>
    </PurchaseOrderLine>
    <PurchaseOrderLine>
        <DATA>300<DATA>
    </PurchaseOrderLine>
</PurchaseOrder>
Run Code Online (Sandbox Code Playgroud)

和XSL:

<xsl:template match="PurchaseOrder">
    <xsl:apply-templates select="PurchaseOrderLine"/>
</xsl:template>

<xsl:template match="PurchaseOrderLine">
    <!-- I want to get the PurchaseOrder\ID here for the current PurchaseOrder -->
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

如何在PurchaseOrderLine中获取当前父元素值(PurchaseOrder\ID)?

rai*_*bba 11

如果您希望模板是原子的(隔离且可重用),则应该以这种方式引用父节点.相反,在调用模板时,传入您希望能够使用的引用.这样,您可以将此模板用于相同类型的节点,即使它具有不同的上下文/父节点(只要您仍然可以加载参数).

<xsl:template match="PurchaseOrder">
    <xsl:apply-templates select="PurchaseOrderLine">
        <xsl:with-param name="PurchaseOrder" select="."/>
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="PurchaseOrderLine">
    <xsl:param name="PurchaseOrder"/>
    <!-- I want to get the PurchaseOrder\ID here for the current PurchaseOrder -->
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

现在,在PurchaseOrderLine模板中,您可以引用$ PurchaseOrder变量.


Tom*_*lak 5

您似乎跳过了有关 XPath 的一些基本阅读。

<xsl:template match="PurchaseOrderLine">
    <xsl:value-of select="../ID" />
</xsl:template>
Run Code Online (Sandbox Code Playgroud)