8

我有一个这样的 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>

和 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>

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

4

3 回答 3

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>

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

于 2014-02-03T22:24:21.697 回答
3

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

<xsl:template match="PurchaseOrderLine">
    <xsl:value-of select="../ID" />
</xsl:template>
于 2012-10-02T07:21:25.470 回答
0

不确定这是否是您要去的地方,但您可以通过执行以下操作匹配父节点,这将检查父节点是否具有子节点。

<xsl:template match="//*[PurchaseOrderLine]>
    <!--- Do you stuff here with parent context--->
</xsl:template>

有了这个你可以做几件事,你可以选择一个带有 ID 和数据值的 PurchaseOrderLine。

<xsl:template match="//PurchaseOrder[ID=3 and PurchaseOrderLine/DATA=100]">
     <!--- Do stuff with parent that has the ID of 3 And the DATA of 200 --->
</xsl:template>
于 2019-01-09T05:40:24.043 回答