views:

1453

answers:

3

Bonjour tout le monde,

I'm having this XML document with namespaces and I want to extract some nodes using XPath.

Here's the document:

<ArrayOfAnyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"&gt;
  <anyType xsi:type="Document">
    <Id>5</Id>
    <Title>T1</Title>
  </anyType>

  <anyType xsi:type="Document">
    <Id>15</Id>
    <Title>T15</Title>
  </anyType>
</ArrayOfAnyType>

What's the XPath expression going to be if I want to extract all "anyType" elements with xsi:type="Document"?

I've tried this:

//anyType[@xsi:type="Document"]

and it doesn't work:

Thanks,

+3  A: 

If you are using C# then you need to specify the namespace for the "anyType" element in your XPath:

var xml = new XmlDocument();
xml.LoadXml( "your xml" );
var names = new XmlNamespaceManager( xml.NameTable );
names.AddNamespace( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
names.AddNamespace( "a", "http://tempuri.org/" );
var nodes = xml.SelectNodes( "//a:anyType[@xsi:type='Document']", names );
David
A: 

I think that

//anyType[namespace-uri() = "http://www.w3.org/2001/XMLSchema-instance"][local-name() = "type"]

Will do what you want.

Jeremy French
Thanks, I think what's wrong in my original expression is I need to prefix anyType with the namespace "xmlns".
EnToutCas