JetBrains Rider 2025.2 Help

XPath 检查

XPath 语言实现提供了一些内置检查,可以在交互模式下编写 XPath 表达式以及编写 XSLT 脚本时检查常见的编码错误。 这些检查还提供了一些配置选项,可以在 检查页面的 设置对话框中进行配置。

在开始之前

按照 从 JetBrains Marketplace 安装插件 中的描述,在 设置/首选项 | 插件 页面上的 Marketplace 选项卡中安装并启用 XPathView + XSLT 插件。

XPath 类型检查

有两个检查处理 XPath 表达式中的类型转换: 隐式类型转换冗余类型转换

隐式类型转换

此检查会检查在预定义的 XPath 类型 STRING、NUMBER、BOOLEAN 和 NODESET 之间的任何隐式转换。 虽然通常这不是问题,因为标准已明确定义了这些转换,但此检查可以帮助编写更能表达类型的 XSLT 脚本,甚至可以帮助避免一些细微的错误:

<xsl:if test="foo" /><xsl:if test="string(foo)" /> 并不相同

第一个测试检查元素 foo是否存在(count(foo) > 0) ,而后者仅在元素实际包含任何文本时为真 string-length(foo) > 0。 插件随后会建议使类型转换更加明确。

通过提供单独启用某些类型之间隐式转换的可能性,有几种选项可以根据个人偏好调整检查。

插件还可以设置为始终标记未产生实际预期类型的显式转换,例如 <xsl:if test="number(foo)" /> ,并提供一个特殊选项,通过使用 字符串() 函数作为编写 string-length() > 0 的快捷方式来忽略从 NODESET 到 BOOLEAN 的转换。

冗余类型转换

此检查会检查是否有使用函数 字符串()数字()布尔() 的任何冗余类型转换,换句话说,检查参数的类型是否与函数的返回类型相同,或者表达式的预期类型是否为 any类型。 虽然这种显式转换有时可能是为了强调类型,但通常可以安全地移除。

表达式有效性检查

这些检查会检查表达式是否包含任何潜在的语义错误,例如引用实例文档中不存在的元素/属性名称或使用不可能匹配任何内容的谓词。

检查节点测试

此检查会检查 XPath 表达式中使用的任何元素/属性名称是否实际上是关联 XML 文件的一部分或在引用的模式中定义的。 这有助于避免由于 XPath 表达式中的拼写错误而导致的问题,这些问题在运行脚本时可能会发生,甚至可能不会立即被识别。

示例:

<xsl:template match="<emphasis>h:txtarea</emphasis>"/>

如果前缀 h绑定到 XHTML 命名空间,检查会将匹配表达式的这一部分标记为未知的元素名称,因为元素的正确名称是 textarea

索引零的使用

此检查会检查在谓词索引中或与函数 位置() 的比较中是否意外使用了零。 这几乎总是一个错误,因为在 XPath 中,索引从一开始, 不是从零开始。

示例:

""" //someelement[position() = 0]//something[0] """

开发自定义 XPath 检查

XPath 检查利用了 JetBrains Rider 中的常规检查 API。 然而,由于 XPath 语言支持的集成方式,这有点复杂。 目前,无法开发完整的第三方 XPath 检查。 虽然理论上可以开发利用 XPath-PSI API 并从 org.intellij.lang.xpath.validation.inspections.XPathInspection 派生的自定义检查,但这不推荐也不受支持。

最后修改日期: 2025年 9月 26日