1

我有以下 XML 文件,其中相同的节点在文件中重复,例如,我需要获取 'console & int' 的值/属性。

知道如何检索 'console & int' 的 'config' 父级,以便在获取 /values/property 之后获得?我遇到的问题是 'console' 和 'int' 处于同一级别,所以我不知道:

  1. 如何同时查询“type=console”和“env=int”?
  2. 一旦我能找到那些特定的节点,如何获得父节点?那么可以在正确的“配置”父节点之后检索“值/属性”吗?

我们需要使用的 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>
4

1 回答 1

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以查询下一个兄弟项目等。

于 2013-03-28T13:16:30.930 回答