我试图解析说"这是一个测试"的消息
<ac:structured-macro ac:name="warning"><ac:rich-text-body><strong>High</strong> This is a test!</ac:rich-text-body></ac:structured-macro>
我在ruby中使用nokogiri,能够解析这么多,没有别的。要做到这一点,我的代码看起来像这样:
xml = Nokogiri::XML(response)
body = xml.at("body").text
alert_body = alert[3]
我已经浪费了太多的时间在confluence rest api文档和谷歌只是一般的xml解析。
问题是:
- 在您的示例XML中没有
body
标记。 - 你正在处理xml命名空间,所以你的选择器需要改变。
您的XML示例是不完整的,因为它缺少定义名称空间的行,所以这是一个hack,但应该让您了解需要做什么:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<foo xmlns:ac="http://www.w3.org/2005/Atom">
<ac:structured-macro ac:name="warning"><ac:rich-text-body><strong>High</strong> This is a test!</ac:rich-text-body></ac:structured-macro>
</foo>
EOT
doc.at('ac|rich-text-body').text # => "High This is a test!"
名称空间是有用的,但它们可能是一个主要的麻烦。Nokogiri使得处理它们非常容易,特别是在使用CSS选择器时。阅读Nokogiri的"搜索HTML/XML文档"页面的"命名空间"部分获取更多信息。