【发布时间】:2014-11-05 12:59:43
【问题描述】:
我想从某个文件夹中的大量 XML 文件中获取某个名称的属性列表。
在这个问题的指导下:XPath Function to query across 50 XML Files?),我也尝试使用 XQuery 进行文件查询,并安装了 Saxon 的 .Net 版本,我编写了如下查询:
Query.exe -qs:"collection('file:///Temp?select=*.xml')//group[1]/product[1]"
但从中我得到了元素下方的所有内容,包括所有子节点。 而且我找不到仅获取属性(或更具体地说是某个“prd_id”属性)的方法。
XML 看起来像这样(简化版):
` <group>
<product prd_id="2047">
<articles>art</articles>
<articles>art</articles>
<articles>art</articles>
</product>
</group>
我希望我的 XQuery 搜索结果是一个 prd_id 属性列表,或者是一个没有子元素的纯产品节点列表(文章节点在实际文件中非常广泛,并且会阻止我选择出/复制有问题的产品属性)。
仅在查询中添加 /@prd_id 会导致如下错误:
First the query:
>Query.exe -qs:"collection('file:///Temp?select=*.xml')//group[1]/product[1]/@prd_id"
没有 systemId 的模块的第 1 行出错:XPTY0004:无法创建其父节点是文档节点的属性节点 (prd_id) 查询处理失败:报告了运行时错误
谢谢, 安德烈亚斯
【问题讨论】:
-
我现在没有撒克逊人,所以我无法测试它,但我猜错误消息试图告诉你你不能序列化属性。使用
collection('file:///Temp?select=*.xml')//group[1]/product[1]/@prd_id/string()可能已经足够了。 -
是的!你说的对!你想把它作为一个答案,以便我可以通过分配它“正确答案”来奖励你吗?请做!如果你碰巧知道如何在没有子节点的情况下写出一个元素,那也是很好的知识(也是第二选择)。
标签: xml xpath xquery file-search