首页 > 解决方案 > XPath 查询以获取子节点,具体取决于节点名称是否以数字开头

问题描述

我有以下 XML 结构:

<products>
    <C8TJM>
        <code>C8TJM</code>
        <name>Product</name>
        <description>Product description</description>
    </C8TJM>
    <D75KF>
        <code>D75KF</code>
        <name>Product</name>
        <description>Product description</description>
    </D75KF>
    <_89TJX>
        <code>89TJX</code>
        <name>Product</name>
        <description>Product description</description>
    </_89TJX>
</products>

每个子节点代表一个产品,节点名称为产品代码。因为 XML 不允许节点以数字开头,所以下划线会自动添加到节点的名称中。

我事先知道产品代码。

我必须编写一个 XPath 查询来:

稍后编辑

设法编写此变量定义:

<xsl:variable name="prefixedProductCode">
    <xsl:choose>
        <xsl:when test="contains('0123456789', substring($productCode, 1, 1))">
            <xsl:value-of select="concat('_', $productCode)"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$productCode" />
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>

但我想在 XPath 查询中即时完成,而不必定义新变量。

标签: xsltxpath

解决方案


最终实现:

//products/node()[name() = $productCode]/description

推荐阅读