user2920456
user2920456

Reputation: 209

Reading XML with XPath - getting XPathException

I am getting a XPathException while reading an xml node value using XPath?

Code snippet:

XPathNavigator nav;
XPathDocument docNav;
string sampleXML = @"C:\\sample.xml";
string ThumbnailXpath = @"//ern:NewReleaseMessage/media/asset/thumbnailURL/text()";
docNav = new XPathDocument(sampleXML);
nav = docNav.CreateNavigator();
thumbnailURL = nav.SelectSingleNode(ThumbnailXpath).Value;

XML

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ern:NewReleaseMessage xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xmlns:ern="http://ddex.net/xml/ern/37" ReleaseProfileVersionId="CommonReleaseTypes/12/AudioAlbum" LanguageAndScriptCode="en" xs:schemaLocation="http://ddex.net/xml/ern/37 http://ddex.net/xml/ern/37/release-notification.xsd" MessageSchemaVersionId="ern/37">
  <IsBackfill>false</IsBackfill>
  <media>
    <asset id="050087105471">
      <language>en_uk</language>    
      <grid/>
      <cpCode/>
      <firstReleaseDate/>
      <territory/>
      <thumbnailURL>placeholder</thumbnailURL>
      <size/>
      <description/>      
    </asset>
  </media>
</ern:NewReleaseMessage>

Exception

An unhandled exception of type 'System.Xml.XPath.XPathException' occurred in System.Xml.

Additional information: Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.

Upvotes: 1

Views: 2217

Answers (1)

JLRishe
JLRishe

Reputation: 101652

Just like the error says, you need to use a namespace manager if your XPath uses namespaces:

XPathNavigator nav;
XPathDocument docNav;

string sampleXML = @"C:\\sample.xml";
string ThumbnailXpath = @"//ern:NewReleaseMessage/media/asset/thumbnailURL/text()";

XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable());
nsm.AddNamespace("ern", "http://ddex.net/xml/ern/37");

docNav = new XPathDocument(sampleXML);
nav = docNav.CreateNavigator();
thumbnailURL = nav.SelectSingleNode(ThumbnailXpath, nsm).Value;

Upvotes: 3

Related Questions