基于子值的XPath选择

时间:2016-12-07 20:49:07

标签: xml xpath

这是一些xml:

<books>
    <book>
        <author>Tom</author>
        <genres>
            <genre>Science</genre>
            <genre>Romance</genre>
        </genres>
    </book>
    <book>
        <author>Mike</author>
        <genres>
            <genre>Politics</genre>
            <genre>Romance</genre>
        </genres>
    </book>
</books>

如何定义一个xpath,以便拉出所有浪漫书籍?或者也许所有浪漫与政治书籍?

2 个答案:

答案 0 :(得分:9)

所有浪漫类型的书籍

//book[genres/genre = 'Romance']

浪漫的所有书籍政治类型

//book[genres/genre = 'Romance' and genres/genre = 'Politics']

所有浪漫的书籍政治类型(与上面的and相同)

//book[genres/genre = 'Romance'][genres/genre = 'Politics']

浪漫的所有书籍政治类型

//book[genres/genre = 'Romance' or genres/genre = 'Politics']

浪漫的所有书籍政治类型(仅限XPath 2.0):

//book[genres/genre = ('Romance', 'Politics')]

备注:

  1. //book在根目录下找到所有book个元素 元件; /books/book找到book个根的所有books个孩子 元件。对于给定的XML,它们选择相同的元素。
  2. 您可以将/author附加到上述任何XPath中以选择 指定标准的书籍的author个元素。
  3. 无法正常工作?

    首先,确定基本的XPath有效://book应返回两个元素。

    如果没有:

    1. 仔细检查XPath表达式和XML的拼写。
    2. 检查案例。 XML和XPath区分大小写。
    3. 检查是否没有名称空间。命名空间实际上是一个 元素和属性的名称的一部分,必须加以考虑 对于。看到 How does XPath deal with XML namespaces?
    4. 然后,从那里逐步添加XPath步骤:

      1. //book[genres]应选择book元素与任何genres 儿童元素。
      2. //book[genres/genre]应选择book个元素 genres子元素,仅当它具有genre子元素时 元件。

      3. //book[genres/genre = 'Romance']应该选择所有图书 浪漫类型,根据要求。请注意,必须引用'Romance'; 否则,表达式将针对字符串值进行测试 Romance的{​​{1}}子元素,肯定会失败。

答案 1 :(得分:7)

您可以分别使用SELECT TVL_CD_LIST FROM TVL_DETAIL WHERE TVL_CD_LIST IN (SELECT regexp_substr(TVL_CD_LIST,'[^_]+', 1, level) FROM DUAL CONNECT BY regexp_substr(TVL_CD_LIST,'[^_]+', 1, level) IS NOT NULL) For Each s In ActivePresentation.Slides(i) If s.Type = msoEmbeddedOLEObject Then s.Select 'select the object s.OLEFormat.Activate 'Activate it (like 2x click)) ActiveWindow.Selection.Unselect 'To let it close ActiveWindow.View.GotoSlide s.Slideindex 'make current slide active End If Next s