XPath 通过多个 ID 输出整个 XML

问题描述

 <bookstore>
   <book>
      <title lang="en" id="1">Harry Potter</title>
      <price>29.99</price>
    </book>
    
    <book>
      <title lang="en" id="2">Learning XML</title>
      <price>39.95</price>
    </book>
 </bookstore>
<photostore>
 <photo>
      <title lang="en" id="3">Learning XPATH</title>
      <price>1.00</price>
    </photo>
</photostore>

我试图实现的是 XPath 显示 id=1 和 id=3 的所有内容包括父节点和锚节点)

输出应该是:

     <bookstore>
    <book>
      <title lang="en" id="1">Harry Potter</title>
      <price>29.99</price>
    </book>
 </bookstore>
<photostore>
 <photo>
      <title lang="en" id="3">Learning XPATH</title>
      <price>1.00</price>
    </photo>
</photostore>

解决方法

我使用的是 BaseX 9.5.1 Beta

XQuery

declare context item := document {
<bookstore>
    <book>
        <title lang="en" id="1">Harry Potter</title>
        <price>29.99</price>
    </book>
    <book>
        <title lang="en" id="2">Learning XML</title>
        <price>39.95</price>
    </book>
    <photostore>
        <photo>
            <title lang="en" id="3">Learning XPATH</title>
            <price>1.00</price>
        </photo>
    </photostore>
</bookstore>  
};

<bookstore>
{
  for $x in ./bookstore/*[descendant::*/@id=("1","3")]
  return $x
}
</bookstore>

输出

<bookstore>
  <book>
    <title lang="en" id="1">Harry Potter</title>
    <price>29.99</price>
  </book>
  <photostore>
    <photo>
      <title lang="en" id="3">Learning XPATH</title>
      <price>1.00</price>
    </photo>
  </photostore>
</bookstore>