XQuery - 根据其子元素在“禁止”列表中删除节点

时间:2010-01-19 12:11:47

标签: xquery

我是XQuery的总菜鸟,但在开始深入研究之前,我想请一些专家就我是否正在寻找正确的方向提出建议。

问题: 一个巨大的xml文件,其中包含大量用户及其访问信息(密码访问权限等)示例如下:

<user>
    <name>JC1234</name>
    <password>popstar</password>
    <accesslevel>0</accesslevel>
</user>
<user>
    <name>AHkl</name>
    <password>Rudy10!</password>
    <accesslevel>2</accesslevel>
</user>

我有一个用户名(csv文件)列表,我需要从那些巨大的xml文件中删除。 结果应该是一个新的xml文件,而不是那些被删除的用户....

这是可行的XQuery吗? 欢迎任何有关快速和肮脏解决方案的建议!

1 个答案:

答案 0 :(得分:1)

在vanilla XQuery 1.0中没有加载CSV文件的标准方法,尽管大多数实现都有未解析的文本功能或类似功能。如果不是,则可以将该文件的内容作为参数传入。

可以使用tokenize函数解析CSV文件:

declare variable $names = tokenize(unparsed-text("banned.csv"), ",")

实际的查询非常简单。假设您的文档是一个只包含<user />个节点列表的片段,那么查询就是

doc("users.xml")/user[not(name=$names)]

但是,如果XML文件包含许多其他数据,那么您可能会发现XSLT的模板工具更有用。