【问题标题】:Is it possible to retrieve attribute names matching certain condition using xpath1.0?是否可以使用 xpath1.0 检索匹配特定条件的属性名称?
【发布时间】:2021-09-16 19:22:16
【问题描述】:
<Tasks>
 <Task>
  <UID>14</UID>
  <Name>Entertainment</Name>
  <ID>2</ID>
  <PerComp>22</PerComp>
 </Task>
 <Task>
  <UID>12</UID>
  <Name>Movie</Name>
  <ID>1</ID>
  <PerComp>55</PerComp>
 </Task>
 <Task>
  <UID>15</UID>
  <Name>Star</Name>
  <ID>3</ID>
  <PerComp>100</PerComp>
 </Task>
</Tasks>
    

是否可以在条件 PerComp 不等于 100 的情况下从上述 XML 中以逗号分隔符列出所有任务名称?可能有 100 个任务,我想要所有任务名称?

预期结果:

Entertainment, Movie, etc.

【问题讨论】:

  • 你加了xquery标签,那为什么标题里把答案限制在xpath 1.0呢?如果您可以使用 xpath 2.0+,我将取消删除我的答案。
  • 我使用的工具只支持xpath1.0。作为替代方案,我计划将 xml 导入 sql 并尝试查询。所以我正在寻找可能的选项 xpath 或 xquery

标签: xml xpath xquery


【解决方案1】:

XPath 1.0 允许您检索节点集(它们是元素,而不是属性 - 您的 XML 不包含属性),但它不允许您将它们的值组合成字符串;这必须由调用应用程序完成。

//Task[not(PerComp = 100)]/Name

【讨论】:

  • //Task[not(PerComp = '100')]/Name 为我工作。谢谢迈克尔。
  • 如果元素名称匹配特定条件,是否也可以检索剩余节点?在上面的示例中,如果元素名称与 Movie 匹配,我想要该节点下的所有节点?
  • XPath 返回对原始文档中节点的引用。如果您选择一个节点,它的所有父节点、子节点和后代节点仍然附加到它,因此您的应用程序也可以访问这些节点。您可以使用 DOM 或 JDOM 等 API 导航到这些节点,也可以执行进一步的 XPath 表达式来到达它们。
  • 14Entertainment222。如何仅按 UID 条件过滤此值?比方说 /Tasks/Task[@UID='14']。我们会这样选择吗?
  • 请不要在 cmets 中对答案提出补充问题。问一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 2018-10-29
  • 2011-04-05
  • 2013-12-13
  • 1970-01-01
  • 2019-02-02
  • 2019-06-28
相关资源
最近更新 更多