我有以下XML文件,其中相同的节点在文件中重复,我需要获取'console&的值/属性。例如,int'。
知道如何检索'console&的'config'父级int'以便我可以在获取/ values / property之后?我遇到的问题是'console'和'int'处于同一级别,所以我不知道:
我们需要使用的XML是:
<server>
<propertySets>
<config>
<type>console</type>
<env>int</env>
<values>
<property name="a">a</property>
<property name="b">b</property>
</values>
</config>
<config>
<type>console</type>
<env>test</env>
<values>
<property name="c">c</property>
<property name="d">d</property>
</values>
</config>
<config>
<type>embedded</type>
<env>int</env>
<values>
<property name="f">f</property>
<property name="g">g</property>
</values>
</config>
</propertySets>
</server>
答案 0 :(得分:2)
xpath
非常灵活;您可以使用XPath查询直接执行所需操作:
xml = Nokogiri::XML::Document.parse( File.open('configs.xml' ) )
xml.xpath('/server/propertySets/config[type="console" and env="int"]/values/property[@name="a"]').text
您无需一次性完成所有操作。 xpath
结果在任何时候都是与该访问者匹配的所有内容,因此您可以像这样获取所选的配置块:
selected_config = xml.xpath('/server/propertySets/config[type="console" and env="int"]')
然后获取您感兴趣的值:
property_a_value = selected_config.xpath('values/property[@name="a"]').text
xpath
的结果会将其上下文保留在主文档中,因此您甚至可以从selected_config
向后扩展以查询下一个兄弟项目等。