2010-01-19 65 views
0

我是XQuery的完全noob,但在开始深入挖掘之前,我想问一些专家的建议,在正确的方向。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

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

的CSV文件,可以使用令牌化功能解析:

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

和实际查询是非常简单的。假设你的文档是一个仅包含<user />节点列表中的片段,则查询是简单

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

但是,如果XML文件中包含了很多其他的数据,那么你可能会发现XSLT的模板设施更加有用。