用于捕获多个值的XPath表达式

时间:2016-07-30 01:29:46

标签: xml xpath

我有一个xml文件,如下所示:

<directory name="/MyServices/MySearchKey" read="true" write="true" show="true" exec="true" del="true" dir="true" reference="true" list="true">
  <Access xmlns:func="http://exslt.org/functions">
    <r>on</r>
    <w>on</w>
    <a>on</a>
    <d>on</d>
    <x>on</x>
  </Access>
  <directory name="/MyServices/MySearchKey/anything_else" read="true" write="true" show="true" exec="true" del="true" dir="true" reference="true" list="true">
    <Access xmlns:func="http://exslt.org/functions">
      <r>on</r>
      <w>on</w>
      <a>on</a>
      <d>on</d>
      <x>on</x>
    </Access>
    <file name="myfile_1">
      <size>5353</size>
      <modified>2016-05-20 00:39:48</modified>
      <Access xmlns:func="http://exslt.org/functions">
        <r>on</r>
        <w>on</w>
        <a>on</a>
        <d>on</d>
        <x>on</x>
      </Access>
    </file>
  </directory>
</directory>

我正在尝试编写一个可捕获的唯一XPath表达式:

  1. 目录名称中包含name的任何directory的{​​{1}}值
  2. 目录名称中包含MySearchKey的目录节点内的任何name的{​​{1}}值
  3. 当然,名称中可能有名为file的目录,我对它们没有任何兴趣,也不会对其下的文件感兴趣。 我需要过滤包含MySearchKey及其中任何文件的目录

    对于此示例,输出将如下所示:

    MySearchKey

    到目前为止,我能够编写MySearchKey来捕获dirs名称,但我不知道如何添加它们包含的文件。

    如何在同一个XPath表达式中添加文件名?

    此致

1 个答案:

答案 0 :(得分:1)

您可以尝试以下代码:

//directory[contains(@name, '/MySearchKey')]/(@name | file/@name)

或XPath 1.0:

//directory[contains(@name, '/MySearchKey')]/@name |
//directory[contains(@name, '/MySearchKey')]/file/@name