首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Nokogiri解析XML文件

如何使用Nokogiri解析XML文件
EN

Stack Overflow用户
提问于 2014-01-29 06:07:55
回答 1查看 184关注 0票数 0

我从一个CSS验证服务得到一个XML响应,如下所示:

代码语言:javascript
复制
{vextwarning=false, output=soap12, lang=en, warning=2, medium=all, profile=css3}
<?xml version='1.0' encoding="utf-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
    <env:Body>
        <m:cssvalidationresponse
            env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"
            xmlns:m="http://www.w3.org/2005/07/css-validator">
            <m:uri>file:tmp.css</m:uri>
            <m:checkedby>http://jigsaw.w3.org/css-validator/</m:checkedby>
            <m:csslevel>css3</m:csslevel>
            <m:date>2014-01-28T09:33:32Z</m:date>
            <m:validity>false</m:validity>
            <m:result>
                <m:errors xml:lang="en">
                    <m:errorcount>1</m:errorcount>
                <m:errorlist>
                    <m:uri>file:tmp.css</m:uri>
                        <m:error>
                            <m:line>1</m:line>
                            <m:errortype>parse-error</m:errortype>
                            <m:context> asdf321 </m:context>
                            <m:errorsubtype>
                                exp
                            </m:errorsubtype>
                            <m:skippedstring>
                                123
                            </m:skippedstring>
                            <m:message>
                                Property bla doesn&#39;t exist : 
                            </m:message>
                        </m:error>
                    </m:errorlist>
                </m:errors>
                <m:warnings xml:lang="en">
                    <m:warningcount>0</m:warningcount>
                </m:warnings>
            </m:result>
        </m:cssvalidationresponse>
    </env:Body>
</env:Envelope>

我想用Nokogiri解析它,但我完全卡住了。我知道如何使用Nokogiri解析CSS之类的东西,但像这样的XML对我来说还是个新鲜事。

例如,我想要获取m:validity的值,或者我想遍历m:errors。请给我一些如何做到这一点的小提示。非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2014-01-29 06:37:53

看起来您正在处理SOAP消息,所以我建议您使用Savon之类的SOAP库。

但是,如果您从另一个源获取XML文档,则可以使用名称空间的XPath查询对其进行解析,如下所示:

代码语言:javascript
复制
class CssValidationResponse
  attr_reader :valid, :errors
  def initialize(xml)
    doc = Nokogiri::XML(xml)
    xmlns = { 'm' => 'http://www.w3.org/2005/07/css-validator' }
    @valid  = (doc.xpath('//m:validity', xmlns).text == 'true')
    @errors = doc.xpath('//m:error/m:message', xmlns).map { |n| n.text.strip }
  end
end

xml = read_my_xml_file
validator = CssValidationResponse.new(xml)
validator.valid  # => false
validator.errors # => ["Property bla doesn't exist :"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21417965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档