Ruby on rails 从CSS选择器获取属性

Ruby on rails 从CSS选择器获取属性,ruby-on-rails,ruby,xml,css-selectors,nokogiri,Ruby On Rails,Ruby,Xml,Css Selectors,Nokogiri,我正在尝试访问XML文档的sender属性: <adi:ADI2 createDateTime="2015-04-10T15:36:03+02:00" docNumber="777" sender="test" relativePriority="1"... 但它不起作用,它给出的结果与: xml.css('/adi|ADI2') 要获取属性的值,我必须使用: xml.css('/adi|ADI2[sender]').attribute('sender') 有没有直接从CSS选择

我正在尝试访问XML文档的
sender
属性:

<adi:ADI2 createDateTime="2015-04-10T15:36:03+02:00" docNumber="777"
  sender="test" relativePriority="1"...
但它不起作用,它给出的结果与:

xml.css('/adi|ADI2')
要获取属性的值,我必须使用:

xml.css('/adi|ADI2[sender]').attribute('sender')

有没有直接从CSS选择器获取属性的方法?

要获取属性,可以使用
@
选择器:

▶ xml = '<tag sender="test">'
#⇒ "<tag sender=\"test\">"
▶ xml = Nokogiri::XML(xml, nil, "UTF-8")
#⇒ #<Nokogiri::XML::Document:0x5ca6f16 name="document" children=...>
                 # ⇓⇓⇓⇓⇓⇓⇓ attribute
▶ xml.xpath('//tag/@sender').text
#⇒ "test"
▶ xml=“”
#⇒ ""
▶ xml=Nokogiri::xml(xml,nil,“UTF-8”)
#⇒ #
# ⇓⇓⇓⇓⇓⇓⇓ 属性
▶ xml.xpath('//tag/@sender').text
#⇒ “测试”

要获取属性,可以使用
@
选择器:

▶ xml = '<tag sender="test">'
#⇒ "<tag sender=\"test\">"
▶ xml = Nokogiri::XML(xml, nil, "UTF-8")
#⇒ #<Nokogiri::XML::Document:0x5ca6f16 name="document" children=...>
                 # ⇓⇓⇓⇓⇓⇓⇓ attribute
▶ xml.xpath('//tag/@sender').text
#⇒ "test"
▶ xml=“”
#⇒ ""
▶ xml=Nokogiri::xml(xml,nil,“UTF-8”)
#⇒ #
# ⇓⇓⇓⇓⇓⇓⇓ 属性
▶ xml.xpath('//tag/@sender').text
#⇒ “测试”

要获取属性,可以使用
@
选择器:

▶ xml = '<tag sender="test">'
#⇒ "<tag sender=\"test\">"
▶ xml = Nokogiri::XML(xml, nil, "UTF-8")
#⇒ #<Nokogiri::XML::Document:0x5ca6f16 name="document" children=...>
                 # ⇓⇓⇓⇓⇓⇓⇓ attribute
▶ xml.xpath('//tag/@sender').text
#⇒ "test"
▶ xml=“”
#⇒ ""
▶ xml=Nokogiri::xml(xml,nil,“UTF-8”)
#⇒ #
# ⇓⇓⇓⇓⇓⇓⇓ 属性
▶ xml.xpath('//tag/@sender').text
#⇒ “测试”

要获取属性,可以使用
@
选择器:

▶ xml = '<tag sender="test">'
#⇒ "<tag sender=\"test\">"
▶ xml = Nokogiri::XML(xml, nil, "UTF-8")
#⇒ #<Nokogiri::XML::Document:0x5ca6f16 name="document" children=...>
                 # ⇓⇓⇓⇓⇓⇓⇓ attribute
▶ xml.xpath('//tag/@sender').text
#⇒ "test"
▶ xml=“”
#⇒ ""
▶ xml=Nokogiri::xml(xml,nil,“UTF-8”)
#⇒ #
# ⇓⇓⇓⇓⇓⇓⇓ 属性
▶ xml.xpath('//tag/@sender').text
#⇒ “测试”

您的XML示例中缺少文档根和名称空间声明,但下面是一个简单的示例:

require 'nokogiri'

doc = Nokogiri::XML('<root xmlns:adi="http://foo.com"><adi:ADI2 createDateTime="2015-04-10T15:36:03+02:00" docNumber="777" sender="test" relativePriority="1"><root>')
doc.at('adi|ADI2')['sender'] # => "test"
这是不正确的

/adi | ADI2[sender]
是一种尝试,它看起来像是使用混合CSS/XPath选择器。我建议坚持使用CSS,因为它更简单、更容易阅读,除非您需要XPath的强大功能

此外,您可能希望使用,而不是使用。返回一个,并且不能使用
[attr]
语法返回找到的每个属性的特定属性,除非您迭代使用
映射。如果您将有该标记的多个实例,那么,或泛型将起作用,否则使用或特定于语言的或来查找第一个此类实例
at
相当于
search(“…”)。首先


Nokogiri的“”教程介绍了这一点。

您的XML示例中缺少文档根和名称空间声明,但下面是一个简单的示例:

require 'nokogiri'

doc = Nokogiri::XML('<root xmlns:adi="http://foo.com"><adi:ADI2 createDateTime="2015-04-10T15:36:03+02:00" docNumber="777" sender="test" relativePriority="1"><root>')
doc.at('adi|ADI2')['sender'] # => "test"
这是不正确的

/adi | ADI2[sender]
是一种尝试,它看起来像是使用混合CSS/XPath选择器。我建议坚持使用CSS,因为它更简单、更容易阅读,除非您需要XPath的强大功能

此外,您可能希望使用,而不是使用。返回一个,并且不能使用
[attr]
语法返回找到的每个属性的特定属性,除非您迭代使用
映射。如果您将有该标记的多个实例,那么,或泛型将起作用,否则使用或特定于语言的或来查找第一个此类实例
at
相当于
search(“…”)。首先


Nokogiri的“”教程介绍了这一点。

您的XML示例中缺少文档根和名称空间声明,但下面是一个简单的示例:

require 'nokogiri'

doc = Nokogiri::XML('<root xmlns:adi="http://foo.com"><adi:ADI2 createDateTime="2015-04-10T15:36:03+02:00" docNumber="777" sender="test" relativePriority="1"><root>')
doc.at('adi|ADI2')['sender'] # => "test"
这是不正确的

/adi | ADI2[sender]
是一种尝试,它看起来像是使用混合CSS/XPath选择器。我建议坚持使用CSS,因为它更简单、更容易阅读,除非您需要XPath的强大功能

此外,您可能希望使用,而不是使用。返回一个,并且不能使用
[attr]
语法返回找到的每个属性的特定属性,除非您迭代使用
映射。如果您将有该标记的多个实例,那么,或泛型将起作用,否则使用或特定于语言的或来查找第一个此类实例
at
相当于
search(“…”)。首先


Nokogiri的“”教程介绍了这一点。

您的XML示例中缺少文档根和名称空间声明,但下面是一个简单的示例:

require 'nokogiri'

doc = Nokogiri::XML('<root xmlns:adi="http://foo.com"><adi:ADI2 createDateTime="2015-04-10T15:36:03+02:00" docNumber="777" sender="test" relativePriority="1"><root>')
doc.at('adi|ADI2')['sender'] # => "test"
这是不正确的

/adi | ADI2[sender]
是一种尝试,它看起来像是使用混合CSS/XPath选择器。我建议坚持使用CSS,因为它更简单、更容易阅读,除非您需要XPath的强大功能

此外,您可能希望使用,而不是使用。返回一个,并且不能使用
[attr]
语法返回找到的每个属性的特定属性,除非您迭代使用
映射。如果您将有该标记的多个实例,那么,或泛型将起作用,否则使用或特定于语言的或来查找第一个此类实例
at
相当于
search(“…”)。首先


Nokogiri的“”教程介绍了这一点。

这是XPath,不是选择器。@BoltClock它选择一个属性。没错,这不是css选择器。这是XPath,不是选择器。它选择一个属性。没错,这不是css选择器。这是XPath,不是选择器。它选择一个属性。没错,这不是css选择器。这是XPath,不是选择器。它选择一个属性。没错,这不是css选择器。我们想看一个更完整的XML示例。名称空间声明有助于我们帮助您。我们希望看到一个更完整的XML示例。名称空间声明有助于我们帮助您。我们希望看到一个更完整的XML示例。名称空间声明有助于我们帮助您。我们希望看到一个更完整的XML示例。名称空间声明有助于我们帮助您。