获取两个字符串之间的字符串?
问题描述:
我有一个字符串:获取两个字符串之间的字符串?
<products type="array">
<product><brand>Rho2</brand>
<created-at type="datetime">2011-11-03T21:29:46Z</created-at><id type="integer">78013</id><name>Test2</name>
<price nil="true"/>
<quantity nil="true"/>
<sku nil="true"/>
<updated-at type="datetime">2011-11-03T21:29:46Z</updated-at>
</product>
<product>
<brand>Apple</brand>
<created-at type="datetime">2011-10-26T21:26:59Z</created-at>
<id type="integer">77678</id>
<name>iPhone</name>
<price>$199.99</price>
<quantity>5</quantity>
<sku>1234</sku>
<updated-at type="datetime">2011-10-26T21:27:00Z</updated-at>
</product>
我想<brand>
和</brand>
之间的文本。
我想解析这个XML,收集标签之间的数据。
答
您应该使用您平台中可用的任何XML解析器。然后你可以使用简单的XPath表达式:
//brand
它选择在文档中的所有元素brand
。
答
XmlSimple应该很容易。
require 'xmlsimple'
products = XmlSimple.xml_in('<YOUR WHOLE XML>', { 'KeyAttr' => 'product' })
答
使用Ruby解析XML和HTML的事实标准是Nokogiri这些天:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<products type="array">
<product>
<brand>Rho2</brand>
<created-at type="datetime">2011-11-03T21:29:46Z</created-at>
</product>
<product>
<brand>Apple</brand>
<created-at type="datetime">2011-10-26T21:26:59Z</created-at>
</product>
</products>
EOT
puts doc.search('brand').map(&:text)
,输出:
Rho2
Apple
答
function getStringBetween(str , fromStr , toStr){
var fromStrIndex = str.indexOf(fromStr) == -1 ? 0 : str.indexOf(fromStr) + fromStr.length;
var toStrIndex = str.slice(fromStrIndex).indexOf(toStr) == -1 ? str.length-1 : str.slice(fromStrIndex).indexOf(toStr) + fromStrIndex;
var strBtween = str.substring(fromStrIndex,toStrIndex);
return strBtween;
}
你写“之间,并得到文本。 “ - 也许你错过标签名称? – WarHog
你的问题没有多大意义。是否有理由不能仅仅使用任意数量的库中的任何一个来解析XML,然后合理地检索数据? – muffinista
REXML或XmlSimple应该这样做。是的,XML可以在一个字符串中,它仍然会解析。周围有更多的图书馆。这里有一个[工作示例](http://xml-simple.rubyforge.org/)。 – abhinav