xml - Pentaho - XPath 选择具有特定父级的所有子级
问题描述
我正在使用 Pentaho '从 XML 获取数据'。
我想选择所有<price>
父<book>
名为'1.1'
.
<bookstore>
<book name = '1.1'>
<title lang="en">Learning XML</title>
<price>29.99</price>
<price>39.99</price>
<price>59.99</price>
</book>
<book name = '1.2'>
<title lang="en">Harry Potter</title>
<price>39.95</price>
</book>
</bookstore>
我在步骤中放置的配置是这样的:
我得到的结果如下:
如果我将 Content 中的“Loop Xpath”更改为:/bookstore/book/price
我得到了 4 行相同的第一个价格 (29.99)。
解决方案
在“内容”中,您将“循环 XPath”设置为/bookstore/book
,因此您将结束(在此示例中)两个项目的循环 - 您想要的一个,另一个。
在“字段”中,您通常设置要从每个项目中提取的数据字段。因此 XPath 在这里应该是相对的。
但是您使用//book[@name = '1.1']/price
的是绝对路径。它选择了三个项目,其中 Pentaho 只能取第一个来填充字段。这就是为什么你得到29.99
两次。
该怎么办?它总是相同的方法。
要获取所有书籍的一般信息:
- 在“循环”部分选择正确的项目:
//book
- 使用相对路径选择字段值:
./price[1]
并且可能./title
要获取一本特定书籍的一般信息:
- 在“循环”部分选择正确的项目:
//book[@name = '1.1']
- 使用相对路径选择字段值:
./price[1]
并且可能./title
要获取一本特定书籍的价格:
- 在“循环”部分选择正确的项目:
//book[@name = '1.1']/price
- 使用相对路径选择字段值:(
./text()
或简单地.
)
推荐阅读
- python - 使用线程从双端队列中弹出整数
- ios - 从 mac 以编程方式浏览 iOS 文件系统
- sql - SQL 选择行 IF 条件满足 否则找到最大日期的行
- html - 如何向 WordPress 选项卡元素添加自定义颜色?
- jquery - 如何在 owl carousal 中删除 10 之前的 0?
- python - 删除熊猫数据框中的所有元素的最佳方法是什么,其中一列中的值在另一列中存在多次?
- python - 更改 matplotlib axes3d PolyCollection 的 Facecolor
- sql - 在Oracle中字母数字的开头和结尾附加单引号
- pusher - Pusher 私人聊天适用于本地主机,不适用于实时服务器
- java - 在 Jboss 模块和项目依赖项之间选择一个库版本