使用正则表达式获取 Nokogiri 节点
Using a regex to get a Nokogiri node
我正在使用 Nokogiri 解析 XML 文件。
目前,我正在使用以下方法获取我需要的值(文档包含多个 Phase
节点):
xml.xpath("//Phase[@text=' = STER P=P(T) ']")
但是现在,上传的 XML 文件可以有一个具有不同值的 text
属性。因此,我正在尝试使用正则表达式更新我的代码,因为该值始终包含 STER
.
看了一些关于 SO 的问题后,我尝试了
xml.xpath("//Phase[@text~=/STER/]")
然而,当我 运行 它时,我得到
ERROR: Invalid predicate: //Phase[@text~=/STER/] (Nokogiri::XML::XPath::SyntaxError)
我在这里错过了什么?
或者,是否有类似于 starts-with 的 XPATH 函数在整个值中查找子字符串,而不仅仅是在它的开头?
您的代码有两个问题:首先,there is no =~
operator in XPath. The way to test whether text matches a regex is using the matches
function:
//Phase[matches(@text, 'STER')]
其次,regex matching is a feature of XPath 2.0, but Nokogiri implements XPath 1.0。
幸运的是,您实际上并没有使用任何正则表达式功能,您只是检查一个固定的字符串,这可以通过使用 contains
function:
的 XPath 1.0 来完成
//Phase[contains(@text, 'STER')]
我正在使用 Nokogiri 解析 XML 文件。
目前,我正在使用以下方法获取我需要的值(文档包含多个 Phase
节点):
xml.xpath("//Phase[@text=' = STER P=P(T) ']")
但是现在,上传的 XML 文件可以有一个具有不同值的 text
属性。因此,我正在尝试使用正则表达式更新我的代码,因为该值始终包含 STER
.
看了一些关于 SO 的问题后,我尝试了
xml.xpath("//Phase[@text~=/STER/]")
然而,当我 运行 它时,我得到
ERROR: Invalid predicate: //Phase[@text~=/STER/] (Nokogiri::XML::XPath::SyntaxError)
我在这里错过了什么?
或者,是否有类似于 starts-with 的 XPATH 函数在整个值中查找子字符串,而不仅仅是在它的开头?
您的代码有两个问题:首先,there is no =~
operator in XPath. The way to test whether text matches a regex is using the matches
function:
//Phase[matches(@text, 'STER')]
其次,regex matching is a feature of XPath 2.0, but Nokogiri implements XPath 1.0。
幸运的是,您实际上并没有使用任何正则表达式功能,您只是检查一个固定的字符串,这可以通过使用 contains
function:
//Phase[contains(@text, 'STER')]