0

我想从某个文件夹中的大量 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)查询处理失败:报告运行时错误

谢谢, 安德烈亚斯

4

1 回答 1

1

正如评论中所说,属性不能序列化。因此,显式请求属性字符串值应该可以解决问题:

collection('file:///Temp?select=*.xml')//group[1]/product[1]/@prd_id/string()

关于您的第二个问题,使用纯 XPath/XQuery 是不可能的。您不能修改元素,这种语言仅用于查询(即选择某些节点、对它们进行分组等)。您将需要XQuery Update来更新元素内容或XSLT来转换 XML。

于 2014-11-06T12:37:48.070 回答