除特定元素名称外,如何定位文档中的所有元素?
例如,我想排除terminate元素.它们可以在整个文档中出现.
<root>
<terminate attr="1" />
<other>
The brown fox jumps over the fence.
<terminate>
<b>stuff</b>
</terminate>
</other>
</root>
Run Code Online (Sandbox Code Playgroud)
我尝试使用not(..)运算符没有成功,因为我使用它错了.
坦率地说谷歌'不'是艰难的!
我有一个divelemet:
<div>
This is some text
<h1>This is a title</h1>
<div>Some other content</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我应该用什么只有XPath表达式获得div内容,而他的子元素
h1和div
//div[not(h1)¬(div)]
那样的东西?我想不明白
正如在这个Stack Overflow回答中想象的那样,您需要选择一个特定的表,然后选择它的所有行.由于HTML的允许性,以下所有三个都是合法标记:
<table id="foo"><tr>...</tr></table>
<table id="foo"><tbody><tr>...</tr></tbody></table>
<table id="foo"><tr>...</tr><tbody><tr>...</tr></tbody></table>
Run Code Online (Sandbox Code Playgroud)
您担心嵌套在表中的表,因此不希望使用类似XPath
table[@id="foo"]//tr.
如果您可以将所需的XPath指定为正则表达式,它可能类似于:
table[@id="foo"](/tbody)?/tr
通常,如何指定允许选择器层次结构中的可选元素的XPath表达式?
要清楚,我不是要解决现实问题或选择特定文档的特定元素.我在寻求解决一类问题的技巧.
我正在尝试dc:title使用xpath 拉出元素.我可以使用以下代码提取元数据.
doc = <<END
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="2.0">
<metadata xmlns:dc="URI">
<dc:title>title text</dc:title>
</metadata>
</package>
END
doc = Nokogiri::XML(doc)
# Awesome this works!
puts '//xmlns:metadata'
puts doc.xpath('//xmlns:metadata')
# => <metadata xmlns:dc="URI"><dc:title>title text</dc:title></metadata>
Run Code Online (Sandbox Code Playgroud)
如您所见,上面似乎正常工作.但是,我似乎无法从此节点树获取标题信息,以下所有内容都失败了.
puts doc.xpath('//xmlns:metadata/title')
# => nil
puts doc.xpath('//xmlns:metadata/dc:title')
# => ERROR: `evaluate': Undefined namespace prefix
puts doc.xpath('//xmlns:dc:title')
# => ERROR: 'evaluate': Invalid expression: //xmlns:dc:title
Run Code Online (Sandbox Code Playgroud)
有人可以解释如何使用上面的xml doc在xpath中使用命名空间.
我试图在文档的任何文本节点中找到某个文本,到目前为止我的语句如下所示:
doc.xpath("//text() = 'Alliance Consulting'") do |node|
...
end
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,任何人都可以提出更好的选择吗?
在我的HTML页面上,我有四十个div,但我只想要一个div
使用敏捷包来搜索并获取所有带有ID的div我使用它
"//div[@id]"
Run Code Online (Sandbox Code Playgroud)
但是我如何搜索带有ID的div,其中id包含文本"test"
<div id="outerdivtest1></div>"
Run Code Online (Sandbox Code Playgroud)
谢谢
是否可以使用XPath仅选择具有特定子元素的节点?例如,从这个XML我只想要宠物中有'bar'子元素的元素.因此,结果数据集将包含此示例中的lizard和pig元素:
<pets>
<cat>
<foo>don't care about this</foo>
</cat>
<dog>
<foo>not this one either</foo>
</dog>
<lizard>
<bar>lizard should be returned, because it has a child of bar</bar>
</lizard>
<pig>
<bar>return pig, too</bar>
</pig>
</pets>
Run Code Online (Sandbox Code Playgroud)
这个Xpath给了我所有的宠物:"/pets/*",但我只想要有一个名字的子节点的宠物'bar'.
我正在寻找一个XPath库来查询FF,IE,Opera和Safari中的XML文档......但是找不到它.你看过了吗?
我正在使用Html Agility Pack在网页上运行xpath查询.我想在表中找到包含某个有趣元素的行.在下面的示例中,我想获取第二行.
<table name="important">
<tr>
<td>Stuff I'm NOT interested in</td>
</tr>
<tr>
<td>Stuff I'm interested in</td>
<td><interestingtag/></td>
<td>More stuff I'm interested in</td>
</tr>
<tr>
<td>Stuff I'm NOT interested in</td>
</tr>
<tr>
<td>Stuff I'm NOT interested in</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
//table[@name='important']/tr[has a descendant named interestingtag]
Run Code Online (Sandbox Code Playgroud)
除了有效的xpath语法.;-)
我想我可以找到有趣的元素本身,然后从返回的节点向上运行父链,但似乎应该有一种方法可以一步完成这一步,而我只是在密集.
考虑以下非常简化的示例.
<n></n>
<k></k>
<m></m>
<k></k>
Run Code Online (Sandbox Code Playgroud)
如何k在m节点后搜索第一个兄弟?基本上,找到一些节点,然后继续从该节点进行搜索.