XPath查询以获取子节点,具体取决于节点名称是否以数字开头

时间:2018-05-18 14:05:34

标签: xslt 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查询中动态执行此操作,而无需定义新变量。

1 个答案:

答案 0 :(得分:0)

最终实施:

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