获取两个字符串之间的字符串?

问题描述:

我有一个字符串:获取两个字符串之间的字符串?

<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,收集标签之间的数据。

+0

你写“之间,并得到文本。 “ - 也许你错过标签名称? – WarHog

+0

你的问题没有多大意义。是否有理由不能仅仅使用任意数量的库中的任何一个来解析XML,然后合理地检索数据? – muffinista

+2

REXML或XmlSimple应该这样做。是的,XML可以在一个字符串中,它仍然会解析。周围有更多的图书馆。这里有一个[工作示例](http://xml-simple.rubyforge.org/)。 – abhinav

您应该使用您平台中可用的任何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; 
}