选择字段元素时不确定 XSLT 文档中的当前路径

Unsure about current path in XSLT document when selecting field element

我正在转换 XML 文件,使用基于 header 中子类型的映射。

为了实现这个逻辑,我在根节点上匹配的模板中使用了 xsl:if。

<xsl:template match="/">
  <xsl:variable name="var:invoiceSubtype" select="//Header/InvoiceType/text()"></xsl:variable>
  <xsl:if test="$var:invoiceSubtype = 'Invoice'">

在 xsl:if 中,我粘贴了地图的 XSLT 代码,没有更改 xpath,但是我的一些元素没有显示任何数据,比如这个:

<BELNR>
   <xsl:value-of select="/Header/InvoiceNumber/text()" />
</BELNR>

在 InvoiceType 之前我的模式结构如下所示:

对 select 元素使用双斜杠有效,但我宁愿避免使用它,因为可能存在重复的命名元素。

在 selecting 节点时,有没有一种方法可以显示您当前在源架构中的位置?我不确定正确的路径是什么。

您可以从根开始更改为完整的 XPATH 以避免使用 //Header/InvoiceType/text(),而是使用:/CDM_PurchaseInvoice/Header/InvoiceType/text()

此外,如果您正在使用命名空间,您应该在 xpath 中考虑到它或使用语法 /x:List/x:Fields/x:Fiels/*[name()='List']/*[name()='Fields']/*[name()='Field'] 否则即使xpath 乍一看是正确的。

参见:Xml Namespace breaking my xpath!