仅保留长xml字符串中的值

时间:2015-07-22 07:45:28

标签: ruby xml

您好我有这个长xml字符串

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CelsiusToFahrenheitResponse xmlns="http://www.w3schools.com/webservices/"><CelsiusToFahrenheitResult>77</CelsiusToFahrenheitResult></CelsiusToFahrenheitResponse></soap:Body></soap:Envelope>

是否可以删除所有内容(包括所有xmlns属性),但是<soap:body></soap:body>之间的部分可以删除

<CelsiusToFahrenheitResponse>
    <CelsiusToFahrenheitResult>77</CelsiusToFahrenheitResult>
</CelsiusToFahrenheitResponse>

如果不可能有新的行或标识也可以。

2 个答案:

答案 0 :(得分:0)

Nokogiri的xpath来救援:

require 'nokogiri'
xml = '<?xml version="1.0" encoding="utf-8"?><soap:Enve....'
xxml = Nokogiri::XML.parse xml
xxml.xpath('//soap:Body/*').to_s
#⇒ "<CelsiusToFahrenheitResponse ..."

答案 1 :(得分:0)

doc = Nokogiri::XML('<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CelsiusToFahrenheitResponse xmlns="http://www.w3schools.com/webservices/"><CelsiusToFahrenheitResult>77</CelsiusToFahrenheitResult></CelsiusToFahrenheitResponse></soap:Body></soap:Envelope>') xml_str = doc.remove_namespaces!.xpath('//Body/*').to_s

这带来了期望的结果

<CelsiusToFahrenheitResponse>
  <CelsiusToFahrenheitResult>77</CelsiusToFahrenheitResult>
</CelsiusToFahrenheitResponse>