我有这样的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)?
答案 0 :(得分: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变量。
答案 1 :(得分:3)
好像你在XPath上跳过了一些基本的阅读。
<xsl:template match="PurchaseOrderLine">
<xsl:value-of select="../ID" />
</xsl:template>
答案 2 :(得分: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>