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 に答える