xml - XPath 表达式根据另一个节点的值选择元素

标签 xml xpath xpath-2.0

对于以下 XML,是否可以使用 XPath 表达式选择具有相同代码的区域项目金额在本地项目金额的 5% 以内的本地项目元素?在此示例中,将选择本地项目 4。

<?xml version="1.0" encoding="UTF-8"?>

<Inventory> 
  <Local> 
    <Item> 
      <Code>1</Code>  
      <Amount>10000</Amount> 
    </Item>  
    <Item> 
      <Code>2</Code>  
      <Amount>20000</Amount> 
    </Item>  
    <Item> 
      <Code>3</Code>  
      <Amount>30000</Amount> 
    </Item>  
    <Item> 
      <Code>4</Code>  
      <Amount>40000</Amount> 
    </Item> 
  </Local>  
  <Regional> 
    <Item> 
      <Code>2</Code>  
      <Amount>100</Amount> 
    </Item>  
    <Item> 
      <Code>4</Code>  
      <Amount>39900</Amount> 
    </Item> 
  </Regional> 
</Inventory>

到目前为止,我只能使用下面的表达式选择具有相同代码的本地项目,它返回两个元素,但我似乎无法弄清楚如何将两个元素乘以 0.95,因为添加了 "/Amount * 0.95"到此表达式的末尾会导致它仅返回第一个项目的金额乘以 0.95。

/Inventory/Local/Item[Code=/Inventory/Regional/Item/Code]

最佳答案

你可以试试xquery :

XQuery

for $x in doc("input.xml")//Local/Item
let $y:=doc("input.xml")//Regional/Item[Code=$x/Code]
where $y/Amount*0.95<=$x/Amount and $x/Amount<=$y/Amount*1.05
return $x

在 shell 中测试

$ zorba -q 'for $x in doc("input.xml")//Local/Item let $y:=doc("input.xml")//Regional/Item[Code=$x/Code] where $y/Amount*0.95<=$x/Amount and $x/Amount<=$y/Amount*1.05 return $x'

输出

<?xml version="1.0" encoding="UTF-8"?>
<Item> 
      <Code>4</Code>  
      <Amount>40000</Amount> 
</Item>

关于xml - XPath 表达式根据另一个节点的值选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15421531/

相关文章:

xml - 计算xpath中子项的特殊文本

xpath - 使用xpath进行节点比较

java jdbc xml sql 条件与 cdata

java - Android 自动完成 TextView 建议下拉菜单出现在软键盘下方

xml - 如何获取XPATH属性数量

PHP 将 xml 节点从一个文档复制到另一个文档

java - Xpath 2.0 函数无法在使用 Saxon 的 Java 中工作

java - 如何使用 JAXB 自定义 XML 导出

android - 在android中创建一个圆形 View

sql - 使用 XQuery 在 XML 中选择除一个以外的所有节点