XPath 检查
XPath 语言实现提供了一些内置检查,可以检查在交互模式下和编写 XSLT 脚本时编写 XPath 表达式时常见的编码错误。这些检查还提供了许多配置选项,可以在“设置”对话框的“检查”页面上进行配置。
由于这些检查的实施和集成方式,它们仅适用于动态编辑器突出显示,而不适用于通过
。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
但不推荐也不支持这样做。