English 中文(简体)
How can I get an attribute from the root in a xml file with XPathNavigator?
原标题:

I would like to get an attribute from my xml file. The attribute is on my root. See here an example:

<PriceList ID="003" xmlns="BLA">
  <Items>
    <Item ID="AAK0435">
      <RetailPrice currency="EUR">1.6</RetailPrice>
    </Item>
    <Item ID="AAL0144">
      <RetailPrice currency="EUR">1470</RetailPrice>
    </Item>
  </Items>
</PriceList>

I would like to get the attribute "ID" on the root. I have try something like this but he doesnt come into the foreach loop.

XPathDocument xPriceDocument = new XPathDocument(priceList.FullName, XmlSpace.None);
                            XPathNavigator xPriceNavigator = xPriceDocument.CreateNavigator();

                            foreach (XPathNavigator xPriceListIdNavigator in xPriceNavigator.Select("PriceList"))
                            {
                                priceListId = xPriceListIdNavigator.GetAttribute("ID", "");
                            }
问题回答

This is a namespace issue.

<PriceList ID="003" xmlns="BLA">

Code xmlns="BLA" in your root element defines a default namespace with URI "BLA". Thus this element and its descendants belong to default namespace "BLA" if the element name doesn t have a namespace prefix. It s easy to forget that an element is in some namespace, if it uses the default namespace, because there is no namespace prefix. Note that default namespace doesn t apply to attributes, only elements.

XPath works with expanded names (that is: a name pair consisting of namespace & local name) and if an element name in your XPath expression doesn t have a namespace prefix, it selects elements that don t belong to any namespace. To use XPath to select elements that belong to some namespace, you need to declare that namespace URI, bind it to a prefix and then use this prefix:element-name combination in your XPath expression.

Namespaces are a fundamental concept in XML. If you are not familiar with namespaces, please take time to learn and understand them.





相关问题
how to represent it in dtd?

I have two element action and guid. guid is a required field when action is add. but when action is del it will not appear in file. How to represent this in dtd ?

.Net application configuration add xml-data

I need to add xml-content to my application configuration file. Is there a way to add it directly to the appSettings section or do I need to implement a configSection? Is it possible to add the xml ...

XStream serializing collections

I have a class structure that I would like to serialize with Xstream. The root class contains a collection of other objects (of varying types). I would like to only serialize part of the objects that ...

MS Word splits words in its XML format

I have a Word 2003 document saved as a XML in WordProcessingML format. It contains few placeholders which will be dynamically replaced by an appropriate content. But, the problem is that Word ...

Merging an XML file with a list of changes

I have two XML files that are generated by another application I have no control over. The first is a settings file, and the second is a list of changes that should be applied to the first. Main ...

How do I check if a node has no siblings?

I have a org.w3c.dom.Node object. I would like to see if it has any other siblings. Here s what I have tried: Node sibling = node.getNextSibling(); if(sibling == null) return true; else ...

Ordering a hash to xml: Rails

I m building an xml document from a hash. The xml attributes need to be in order. How can this be accomplished? hash.to_xml

热门标签