首页 > 解决方案 > 组合 xpath 表达式

问题描述

我有以下xml

<?xml version="1.0" encoding="utf-8"?>
<movies>
 <movie>
  <title>Star Wars</title>
  <genre>sci-fi</genre>
  <year>1977</year>
  <cast>
   <character cid="001">
    <role>Hero</role>
    <name>
     <first>Mark </first>
     <last>Hamill</last>
    </name>
   </character>
    <character cid="002">
               <role> Ass </role>
    <name> 
    <first> Jack</first>
    <last> Apple</last>
    </name>
   </character>
  </cast>
  <director>
    <name> 
      <first> Mark </first>
      <last> Hamill</last>
    </name>
    </director>
  <producer />
  <studio>Disney</studio>
 </movie>
 
 <movie>
  <title>Star Wars 2</title>
  <genre>sci-fi</genre>
  <year>20112</year>
  <cast>
   <character cid="002">
    <role>Hero</role>
    <name>
     <first>Mark</first>
     <last>Joseph</last>
    </name>
   </character>
  </cast>
  <director />
  <producer />
  <studio>Disney</studio>
 </movie>
 <people peoid="001">
  <name>
   <first>Mark </first>
   <last>Wei</last>
  </name>
  <name>
   <first> John</first>
   <last> Doe</last>
  </name>
 </people>
</movies>

我正在尝试提出一个 Xpath 查询,该查询将给出导演也是演员的所有电影的标题。例如下面,马克哈米尔出现在演员阵容中,也是导演。我知道获取导演名称的 xpath 表达式:/movies/movie/director[name]。以及用于从演员 /movies/movie/cast/character[name] 中获取名称的 xpath 表达式。有没有办法将两者结合起来以获得所需的xpath?

标签: xmlxpath

解决方案


XSLT 2.0 具有量化表达式

看看下面。

XPath 2.0

/movies/movie[some $x in director/name/last satisfies cast/character/name/last = $x]/title

比较名字和姓氏。

/movies/movie[some $x in director/name/concat(first,'|',last) satisfies cast/character/name/concat(first,'|',last) = $x]/title

推荐阅读