在 Ruby 中使用 Nokigiri 获取嵌套的 XML 标签
Get nested XML tags using Nokigiri in Ruby
我使用此 Ruby 代码来获取 XML 标记值:
def value_from_xml_for(xml, tag)
xml_body = Nokogiri::XML(xml)
hash = Hash.from_xml(xml_body.to_s)
hash.dig("payment_transaction", tag)
end
我想获取国家/地区的值:
<payment_transaction>
<card_holder>Automation Example</card_holder>
<billing_address>
<country>DE</country>
</billing_address>
</payment_transaction>
目前我没有得到。我如何扩展代码以使用内部 XML 标签?
这是一个如何在 nokogiri 中解析 XML 的示例,这就是您的方法试图做的所有事情:
xml_str = <<EOF
<payment_transaction>
<card_holder>Automation Example</card_holder>
<billing_address>
<country>DE</country>
</billing_address>
</payment_transaction>
doc = Nokogiri::XML(xml_str)
doc.at_xpath('//country').to_s
因此,只需使用 nokogiri 来解析 xml,因为这是它的长处,您根本不需要哈希方法。你的方法应该是这样的:
def value_from_xml_for(xml, tag)
tag = "//" + tag # assuming you pass 'country' as tag
xml_body = Nokogiri::XML(xml)
xml_body.at_xpath(tag)
end
如果您只想获取标签的文本
def value_from_xml_for(xml, tag)
tag = "//" + tag # assuming you pass 'country' as tag
xml_body = Nokogiri::XML(xml)
tag = xml_body.at_xpath(tag)
tag.text if tag
end
我使用此 Ruby 代码来获取 XML 标记值:
def value_from_xml_for(xml, tag)
xml_body = Nokogiri::XML(xml)
hash = Hash.from_xml(xml_body.to_s)
hash.dig("payment_transaction", tag)
end
我想获取国家/地区的值:
<payment_transaction>
<card_holder>Automation Example</card_holder>
<billing_address>
<country>DE</country>
</billing_address>
</payment_transaction>
目前我没有得到。我如何扩展代码以使用内部 XML 标签?
这是一个如何在 nokogiri 中解析 XML 的示例,这就是您的方法试图做的所有事情:
xml_str = <<EOF
<payment_transaction>
<card_holder>Automation Example</card_holder>
<billing_address>
<country>DE</country>
</billing_address>
</payment_transaction>
doc = Nokogiri::XML(xml_str)
doc.at_xpath('//country').to_s
因此,只需使用 nokogiri 来解析 xml,因为这是它的长处,您根本不需要哈希方法。你的方法应该是这样的:
def value_from_xml_for(xml, tag)
tag = "//" + tag # assuming you pass 'country' as tag
xml_body = Nokogiri::XML(xml)
xml_body.at_xpath(tag)
end
如果您只想获取标签的文本
def value_from_xml_for(xml, tag)
tag = "//" + tag # assuming you pass 'country' as tag
xml_body = Nokogiri::XML(xml)
tag = xml_body.at_xpath(tag)
tag.text if tag
end