选择字段元素时不确定 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!
我正在转换 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!