无法在Ruby中处理XML属性XPath(使用Nokogiri)
我正在尝试过滤xml文件以获得具有特定属性的节点。我可以成功地按节点ex进行筛选。\top\u manager,但是当我尝试\\top\u manager[@salary='great']时,我什么也没有得到无法在Ruby中处理XML属性XPath(使用Nokogiri),ruby,xml,xpath,nokogiri,Ruby,Xml,Xpath,Nokogiri,我正在尝试过滤xml文件以获得具有特定属性的节点。我可以成功地按节点ex进行筛选。\top\u manager,但是当我尝试\\top\u manager[@salary='great']时,我什么也没有得到 <?xml version= "1.0"?> <employee xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLo
<?xml version= "1.0"?>
<employee xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="employee.xsd">
<top_manager>
<ceo salary="great" respect="enormous" type="extra">
<fname>
Vasya
</fname>
<lname>
Pypkin
</lname>
<hire_date>
19
</hire_date>
<descr>
Big boss
</descr>
</ceo>
<cio salary="big" respect="great" type="intro">
<fname>
Petr
</fname>
<lname>
Pypkin
</lname>
<hire_date>
25
</hire_date>
<descr>
Resposible for information security
</descr>
</cio>
</top_manager>
谢谢。这是因为工资不是元素的属性,而是的子元素的属性:
//xmlns:top_manager[*[@salary='great']]
上面的XPath select元素具有其任何子元素的属性salary equals great。或者,如果要在本例中选择元素的子元素:
//xmlns:top_manager/*[@salary='great']
@JohnWalski上面建议的2个XPath中的任何一个都返回您所需的正确节点?很抱歉延迟,运行状况有问题。我需要第二个XPath请求。我理解我的错误。但即使有了改进,这段代码对我也不起作用。我的代码返回0。你能就这个问题给出一些建议吗?@JohnWalski我怀疑这是因为XML有默认的名称空间,请尝试在XPath中添加xmlns前缀,我不是ruby用户,根据另一个线程的建议:。更新答案以反映这一建议
//xmlns:top_manager/*[@salary='great']