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 查询中即时完成,而不必定义新变量。
解决方案
最终实现:
//products/node()[name() = $productCode]/description
推荐阅读
- ios - 有谁知道iOS是否可以选择添加此功能,在您的视图顶部有这个圆形灰色视图?
- java - 应用程序启动时键盘自动显示?
- ruby-on-rails - 配置 parallel_tests 以在 docker 容器内使用
- json - Dart json.decode 无法解码为 Map
- terraform - 有没有办法为 Terraform 存档提供程序定义多个 source_file?
- python - 循环数据框列并在 Python 中分别绘图
- arduino - 带寄存器的 Arduino Uno SPI
- ruby-on-rails - 在带有错误处理的 Rails 中下载文件
- python - 在页面上找不到下一步按钮
- macos - mojave 不提示用户访问联系人