【问题标题】:Reading XML with XPath - getting XPathException使用 XPath 读取 XML - 获取 XPathException
【发布时间】:2026-01-25 07:30:01
【问题描述】:

我在使用 XPath 读取 xml 节点值时遇到 XPathException?

代码sn-p:

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>

例外

System.Xml 中发生了“System.Xml.XPath.XPathException”类型的未处理异常。

其他信息:需要命名空间管理器或 XsltContext。此查询具有前缀、变量或用户定义的函数。

【问题讨论】:

    标签: c# xpath xml-namespaces xpathnavigator selectsinglenode


    【解决方案1】:

    正如错误所说,如果您的 XPath 使用命名空间,则需要使用命名空间管理器:

    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;
    

    【讨论】: