Question

In my answer to another post in SO (here: SharePoint 2007, how to check if a folder exists in a document library) I had to parse an XML document with structure:

D:multistatus
|--D:response
|----D:propstat
|-------D:prop
|----------D:displayname
|----------D:isFolder

Is it possible to construct an XPath statement that selects a set of such D:response elements that contain D:displayname equal to "someName" and D:isFolder is "t"?

I know how to do it if I select all D:response elements and then loop through the result set, but I believe XPath is powerful enough to do that in more delicate way.

Was it helpful?

Solution

//D:response[D:propstat/D:prop/D:displayname="someName" and D:propstat/D:prop/D:isFolder="t"]

OTHER TIPS

If displayname and isFolder can appear anywhere within D:response, then this should work.

//D:response//[D:displayname="someName" and D:isFolder="t"]

// means the node can appear anywhere in the hierarchy and

[...] is a predicate used to filter elements matching the given criteria.

A shorter and more efficient variant of @Jimmy Zhang's answer is

/*/D:response[D:propstat/D:prop[D:displayname='someName' and D:isFolder='t']]

It avoids the inefficient // operator (which needlessly checks the whole tree when the position of the target element is actually known). Also it uses a nested predicate to avoid redundancy.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top