我有一个具有以下结构的文件
<admin>
<sampleName>Willow oak leaf</sampleName>
<sampleDescription comment="Total genes">
<cvParam cvLabel="Bob" accession="123" name="Oak" />
</sampleDescription>
</admin>
我试图在sampleDescription注释后输出“Total genes”文本,我使用了以下代码:
sampleDescription = doc.xpath( "/admin/Description/@comment" )
sampleDescription = doc.xpath( "/admin/Description" ).text
但是都不行。我错过了什么?
答案 0 :(得分:1)
可能是一个错字......你试过doc.xpath("/admin/sampleDescription/@comment").text
吗?
答案 1 :(得分:1)
它没有用,因为没有Description元素。正如Iwe所提到的,你需要做一些像sampleDescription = doc.xpath("/admin/sampleDescription/@comment").to_s
另外,如果是我,我会sampleDescription = doc.xpath("//sampleDescription/@comment").to_s
。这是一个更简单的xpath,但它可能会更慢。
作为一个说明,许多人绊倒的是命名空间。如果您的xml文档使用名称空间,请执行sampleDescription = doc.xpath("/xmlns:admin/sampleDescription/@comment").to_s
。如果您的doc使用名称空间而您没有使用xmlns:
指定它,那么Nokogiri将不会返回任何内容。
答案 2 :(得分:1)
试试这个:
doc.xpath("//admin/sampleDescription/@comment").to_s
答案 3 :(得分:0)
doc.xpath
返回一个有点像数组的NodeSet。所以你需要抓住第一个元素
doc.xpath("//admin/sampleDescription").first['comment']
您还可以使用等同于at_xpath
xpath(foo).first
doc.at_xpath("//admin/sampleDescription")['comment']
需要注意的另一件事是节点上的属性像哈希元素一样被访问 - 使用[<key>]