PhpStorm 2021.3 Help

XPath 检查

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

由于这些检查的实施和集成方式,它们仅适用于动态编辑器突出显示,而不适用于通过Code |运行检查时。检查代码

XPath 类型检查

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

隐式类型转换

此检查检查预定义的 XPath 类型 STRING、NUMBER、BOOLEAN 和 NODESET 之间的任何隐式转换。虽然这通常不是问题,因为标准对转换进行了很好的定义,但这种检查有助于编写更能表达类型的 XSLT 脚本,甚至有助于避免细微的错误:

<xsl:if test="foo" />不一样<xsl:if test="string(foo)" />

第一个测试检查元素foo是否存在 ( count(foo) > 0),但只有当元素实际包含任何 text 时,后一个测试才为真string-length(foo) > 0。然后插件将提供使类型转换更加明确。

有几个选项可以根据个人喜好调整检查,方法是提供单独启用特定类型之间隐式转换的可能性。

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

冗余类型转换

这个检查检查函数的类型转换是否string()number()多余boolean()的,即参数的类型是否与函数的返回类型相同,或者表达式的预期类型是否为any类型。虽然这种显式转换有时可能是为了强调类型,但通常可以安全地删除。

表达式有效性检查

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

检查节点测试

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

例子:

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

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

索引零使用

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

例子:

//someelement[position() = 0]要么//something[0]

开发自定义 XPath 检查

XPath 检查使用 PhpStorm 的正常检查 API。但是,由于集成了 XPath 语言支持的方式,这有点复杂,目前还不太可能开发完整的第 3 方 XPath 检查。虽然理论上可以开发使用 XPath-PSI API 并派生自 的自定义检查,org.intellij.lang.xpath.validation.inspections.XPathInspection但不推荐也不支持这样做。

最后修改:2021 年 9 月 23 日