Xpath 选择包含特定列表子集的元素

2024-04-06

再会!假设以下 XML:

<store>
    <book id="b1"></book>
    <book id="b2"></book>
</store>
<store>
    <book id="b2"></book>
    <book id="b4"></book>
</store>
<booklist>
    <book id="b1"></book>
    <book id="b2"></book>
    <book id="b3"></book>
</booklist>

我想编写一个 Xpath 查询来选择商店
他们所有的书都在书单里。在我的示例中,它是第一家商店,但不是第二家。
我试过了
//store[./book/@id = /booklist/book/@id]
但它选择包含至少一本普通书的商店,而不是全部。
另外,没有找到任何像两个节点列表的“包含”这样的谓词,所以我缺乏想法。

编辑:我非常感谢任何帮助,但我更喜欢一个使用“基本”Xpath 功能(如果存在)的解决方案。这对我来说是一门新语言。不过,还是要感谢迄今为止所有回复的人。


Use:

/*/store[not(book[not(@id = /*/booklist/*/@id)])]

当应用于此 XML 文档时(所提供的,通过用单个顶部元素包裹它而形成良好的形式):

<t>
    <store>
        <book id="b1"></book>
        <book id="b2"></book>
    </store>
    <store>
        <book id="b2"></book>
        <book id="b4"></book>
    </store>
    <booklist>
        <book id="b1"></book>
        <book id="b2"></book>
        <book id="b3"></book>
    </booklist>
</t>

通缉犯stor元素被选中:

<store>
   <book id="b1"/>
   <book id="b2"/>
</store>

使用XSLT作为XPath的宿主进行验证:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:copy-of select=
     "/*/store[not(book[not(@id = /*/booklist/*/@id)])]"/>
 </xsl:template>
</xsl:stylesheet>

当此 XSLT 转换应用于上述 XML 文档时,就会产生所需的正确结果:

<store>
   <book id="b1"/>
   <book id="b2"/>
</store>

解释:

表达方式:

/*/store[not(book[not(@id = /*/booklist/*/@id)])]

means:

全选store元素(顶部元素的子元素),甚至没有一个book(孩子)在他们的id属性的值是其中之一id的属性值book的(孩子)booklist.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xpath 选择包含特定列表子集的元素 的相关文章

随机推荐

  • 即使类不可用, NSClassFromString() 也会返回一个类

    我目前正在运行 iOS 4 0 的 iPhone 3G 上测试一个应用程序 我有以下代码来检查该类是否可用 if NSClassFromString CLGeocoder 在文档中 它指出 CLGeocoder 可用于 iOs 5 0 及更
  • 在iOS中查找rootViewController

    在 ShareKit 中 代码需要确定 rootViewController 的位置 以便它可以显示模式视图 由于某种原因 代码在 iOS 5 中失败 Try to find the root view controller program
  • Java JTable 使用 TableCellRenderer 排序

    我对 Java 有点陌生 并且遇到了一些问题JTable与排序和TableCellRenderer 我有一个包含 15 列的表 其中填充了值 在某些列上我使用TableCellRenderer根据单元格上的值将前景颜色更改为绿色或红色 一切
  • RSpec & Rails:用于翻译助手的存根 @virtual_path 来测试应用程序助手

    我有一个帮手page title default in ApplicationHelper def page title default options t title options end 现在我想像这样测试它 describe pag
  • 格式化 JEditorPane 的光标、工具提示、链接

    现在 我正在使用 Java Swing 创建 JEditorPane 主要是因为它具有超链接的能力 我已经成功地能够显示链接并让它们在单击时执行行为 但是我遇到了一些格式问题 如何设置光标 使其通常为箭头 但将鼠标悬停在文本上时更改为文本光
  • Angular $state.go {reload: true} 不应重新初始化抽象父控制器

    我正在使用 ui route 进行导航 我有一个叫做父亲的国家main 这是一个abstract状态 网址 main 和子状态products and users urls 主要产品 and 主 用户 app config statePro
  • 方程编号与 Rmarkdown 中的预览到 pdf?

    在 Rmarkdown 中 编织为 PDF 如果我写一个等式 begin equation y x 2 end equation 然后我在 PDF 输出中得到一个编号方程 如果我写一个等式 y x 3 那么方程就没有编号 我喜欢能够控制哪些
  • 如何阅读/改进 PHP 计算的 C.R.A.P 指数

    我刚刚开始使用 PHPUnit 及其丰富多彩的代码覆盖率报告 我了解所有的数字和百分比 除了一个 C R A P 指数 谁能给我一个可靠的解释 解释它的含义 如何分析它以及如何降低它 Toader Mihai 提供了可靠的解释 https
  • 如何使用 docker-compose 重启单个容器

    我有一个docker compose yml包含 4 个容器的文件 redis postgres api and worker 在开发过程中worker容器 我经常需要重新启动它才能应用更改 有什么好的方法可以重新启动单个容器 例如work
  • 如何检查一个字符是否等于一个空格?

    这是我所得到的 private static int countNumChars String s for char c s toCharArray if Equals c 但该代码表示 找不到该方法的符号 我记得 Java 有一个这样的比
  • 基本路径覆盖有什么意义?

    文章位于onjava http www onjava com pub a onjava 2007 03 02 statement branch and path coverage testing in java html page 2似乎意
  • 无法在 Win 7 Prof 上以 64 位模式运行 CMD

    我已经完成了我的作业 诚实地尝试了我能想到的一切 但似乎每次我打开 CMD 时 我都会得到 32 位版本 无论我从哪里打开它 我努力了 Windows 启动 orb gt CMD gt 输入 输入 C Windows System32 cm
  • 尝试启动 TunnelProvider 网络扩展时出现 NEVPNErrorDomain 错误 1

    我正在尝试通过从 TunnelProvider 的 XCode 模板开始 然后将代码添加到主机应用程序来配置并启动它来制作自定义 TunnelProvider 网络扩展 我正在使用 NETunnelProviderManager 的实例来配
  • 如何使用冒泡排序在 Python 3 中对列表进行排序和子排序

    我正在为我正在学习的课程解答一个额外问题 假设我们有一个列表 例如mylist a1 b2 a3 c1 b1 a5 b3 c9 我想使用基本的Python而不导入任何东西 我想首先按字母顺序对列表进行排序 然后对于每个字母 我按数字排序 因
  • 拖放到桌面图标上

    我想这应该很简单 我在这里看过类似的问题 但我的旧大脑并不清楚它应该如何工作 我有一个 Windows 窗体应用程序 我的用户想要将文件拖到桌面上的应用程序图标上 并使用该文件执行程序 所以我想做的是 接受图标上放置的文件 启动应用程序并将
  • App Engine 从 JsonProperty 返回 JSON

    我喜欢如何JsonProperty当属性放入数据存储时 自动将 Python 结构编码为 JSON 并在检索时自动解码 但是 最好将该 JSON 数据发送到 Web 浏览器 而无需再次对其进行编码 有没有办法获取原始 JSON 数据 即阻止
  • 线程本地存储开销

    假设有一些不可重入函数使用全局变量 int i void foo void modify i 然后 我想在多线程代码中使用这个函数 所以我可以这样更改代码 void foo int i modify i 或者 通过使用 gcc thread
  • Java Swing - Repaint() 无法正常工作

    我从以下位置获取程序这个话题 https stackoverflow com questions 8693342 drawing a simple line graph in java 我尝试在实时模式下编辑点 我将 MouseMotion
  • API 和 ABI 之间的区别

    我是 Linux 系统编程新手 在阅读时遇到了 API 和 ABILinux系统编程 API定义 API 定义了接口 通过这些接口 一个软件可以进行通信 与源级别的另一个 ABI的定义 而 API 定义了源 接口 ABI 定义了 两者之间的
  • Xpath 选择包含特定列表子集的元素

    再会 假设以下 XML