Ruby on rails 我如何得到子字符串?

Ruby on rails 我如何得到子字符串?,ruby-on-rails,ruby,web,Ruby On Rails,Ruby,Web,如何获取字符串的子字符串: [{ "ProductId"=>198, "AttributesXml"=>"<Attributes><ProductAttribute ID=\"590\"><ProductAttributeValue><Value>1691</Value></ProductAttributeValue></ProductAttribute></Attributes>

如何获取字符串的子字符串:

[{
  "ProductId"=>198, 
  "AttributesXml"=>"<Attributes><ProductAttribute ID=\"590\"><ProductAttributeValue><Value>1691</Value></ProductAttributeValue></ProductAttribute></Attributes>",   
  "StockQuantity"=>1, 
  "AllowOutOfStockOrders"=>false,
  "Sku"=>nil, 
  "ManufacturerPartNumber"=>nil, 
  "Gtin"=>nil, 
  "OverriddenPrice"=>nil, 
  "NotifyAdminForQuantityBelow"=>1, "Id"=>1756
  },
[{
“ProductId”=>198,
“AttributesXml”=>“1691”,
“库存数量”=>1,
“AllowOutOfStockOrders”=>错误,
“Sku”=>零,
“制造商零件号”=>零,
“Gtin”=>零,
“覆盖价格”=>零,
“NotifyAdminForQuantityBelow”=>1,“Id”=>1756
},
我只需要
“ProductaAttribute ID”:590的值。只需要数字。
我已经查看了ruby文档,但找不到解决方案。

您可以利用


标记有rails,如果您在rails中,那么您可以利用nokogiri gem来处理AttributesXml部分的解析:

require 'nokogiri'

array = [{"ProductId"=>198, "AttributesXml"=>"<Attributes><ProductAttribute
 ID=\"590\"><ProductAttributeValue><Value>1691</Value>
 </ProductAttributeValue></ProductAttribute></Attributes>",
 "StockQuantity"=>1, "AllowOutOfStockOrders"=>false,"Sku"=>nil,
 "ManufacturerPartNumber"=>nil, "Gtin"=>nil, "OverriddenPrice"=>nil,
 "NotifyAdminForQuantityBelow"=>1, "Id"=>1756}]

array.each do |item|
  doc = Nokogiri::XML(item['AttributesXml'])
  puts doc.xpath("//ProductAttribute").attribute('ID')
end
=> 590
需要“nokogiri”
数组=[{“ProductId”=>198,“AttributesXml”=>1691
",
“库存数量”=>1,“允许库存订单”=>false,“库存单位”=>nil,
“制造商零件号”=>零,“Gtin”=>零,“覆盖价格”=>零,
“NotifyAdminForQuantityBelow”=>1,“Id”=>1756}]
数组。每个do |项|
doc=Nokogiri::XML(项['AttributesXml'])
放置doc.xpath(“//ProductAttribute”).attribute('ID')
结束
=> 590
我会使用:

require 'nokogiri'

foo = [
  {
    "ProductId"=>198, 
    "AttributesXml"=>"<Attributes><ProductAttribute ID=\"590\"><ProductAttributeValue><Value>1691</Value></ProductAttributeValue></ProductAttribute></Attributes>",   
    "StockQuantity"=>1, 
    "AllowOutOfStockOrders"=>false,
    "Sku"=>nil, 
    "ManufacturerPartNumber"=>nil, 
    "Gtin"=>nil, 
    "OverriddenPrice"=>nil, 
    "NotifyAdminForQuantityBelow"=>1, "Id"=>1756
  },
]

foo.map { |hash|
  Nokogiri::XML(hash['AttributesXml']).at('ProductAttribute')['ID']
}
# => ["590"]
需要“nokogiri”
foo=[
{
“ProductId”=>198,
“AttributesXml”=>“1691”,
“库存数量”=>1,
“AllowOutOfStockOrders”=>错误,
“Sku”=>零,
“制造商零件号”=>零,
“Gtin”=>零,
“覆盖价格”=>零,
“NotifyAdminForQuantityBelow”=>1,“Id”=>1756
},
]
foo.map{| hash|
Nokogiri::XML(hash['AttributesXml'])。位于('ProductAttribute')['ID']
}
# => ["590"]

它将返回数组中所有散列中所有
节点的ID。

590
来自何处?你能用你正在处理的数据的完整字符串表示更新这个问题并使用代码格式帮助我们阅读吗?抱歉,我编辑了我的帖子。590在string.NP中-谢谢你的澄清n、 到目前为止你有什么?你也可以发布吗?我们想看看你尝试了什么。没有努力的证据,看起来你希望我们为你解决它,这不是为什么。你读了哪些文档,为什么没有帮助?你写了代码吗?如果没有,为什么?如果有,演示问题的最低代码在哪里?谢谢你的a回答。它工作得很好。但是我怎么能只得到数字呢?我得到[“590”]。我怎么能只得到第一个?我得到[“590”[“590”][“590”[“590”][“590”][“590”]。我只想要一个590。谢谢你的回答。我得到以下错误:“没有将字符串隐式转换为整数的过程:”doc=Nokogiri::XML(test['AttributesXml'])”我能做什么?你能帮我吗?这是因为你必须在一个数组中。把它放在一个
每个
循环中。更新答案并把测试数据放在一个数组中。一般的想法是,在我们向你展示了如何从XML字符串中提取数据之后,你应该能够使用更常见的ruby操作符以你需要的方式修复结果。我不明白你的意思。你能给我一个例子吗?小心使用
doc.xpath(“//ProductAttribute”)。attribute('ID')
xpath
返回一个节点集,因此如果找到多个
ProductAttribute
节点,那么
attribute
将返回一个数组。
require 'nokogiri'

array = [{"ProductId"=>198, "AttributesXml"=>"<Attributes><ProductAttribute
 ID=\"590\"><ProductAttributeValue><Value>1691</Value>
 </ProductAttributeValue></ProductAttribute></Attributes>",
 "StockQuantity"=>1, "AllowOutOfStockOrders"=>false,"Sku"=>nil,
 "ManufacturerPartNumber"=>nil, "Gtin"=>nil, "OverriddenPrice"=>nil,
 "NotifyAdminForQuantityBelow"=>1, "Id"=>1756}]

array.each do |item|
  doc = Nokogiri::XML(item['AttributesXml'])
  puts doc.xpath("//ProductAttribute").attribute('ID')
end
=> 590
require 'nokogiri'

foo = [
  {
    "ProductId"=>198, 
    "AttributesXml"=>"<Attributes><ProductAttribute ID=\"590\"><ProductAttributeValue><Value>1691</Value></ProductAttributeValue></ProductAttribute></Attributes>",   
    "StockQuantity"=>1, 
    "AllowOutOfStockOrders"=>false,
    "Sku"=>nil, 
    "ManufacturerPartNumber"=>nil, 
    "Gtin"=>nil, 
    "OverriddenPrice"=>nil, 
    "NotifyAdminForQuantityBelow"=>1, "Id"=>1756
  },
]

foo.map { |hash|
  Nokogiri::XML(hash['AttributesXml']).at('ProductAttribute')['ID']
}
# => ["590"]