开发者

XQuery - remove nodes based on its sub element being in the "ban" list

开发者 https://www.devze.com 2022-12-17 00:40 出处:网络
I am a total noob with XQuery, but before at start digging deep into it, i\'d like to ask some experts advice about whether i am looking at the correct direction.

I am a total noob with XQuery, but before at start digging deep into it, i'd like to ask some experts advice about whether i am looking at the correct direction.

The problem: A huge xml file which contains a whole lot of users and their access information (password access rights and so on) example below:

<user>
    <name>JC1234</name>
    <password>popstar</password>
    <accesslevel>开发者_如何转开发0</accesslevel>
</user>
<user>
    <name>AHkl</name>
    <password>Rudy10!</password>
    <accesslevel>2</accesslevel>
</user>

i have a list of user names (csv file) that i need to remove from that huge xml files. the result should be a new xml file wihtout those removed users....

is this feasable with XQuery? any advice for a quick and dirty solution is welcomed!


There is no standard way of loading a CSV file in vanilla XQuery 1.0, although most implementations have an unparsed-text function or similar. If not the contents of the file can be passed in as a parameter.

The CSV file can be parsed using the tokenize function:

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

And the actual query is quite straightforward. Assuming your document is a a fragment containing just a list of <user /> nodes then the query is simply

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

If however the XML file contains a lot of other data then you may find XSLT's templating facilities more useful.

0

精彩评论

暂无评论...
验证码 换一张
取 消