首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >名称空间管理器或XsltContext需要

名称空间管理器或XsltContext需要
EN

Stack Overflow用户
提问于 2011-08-17 05:23:24
回答 1查看 9.8K关注 0票数 3

我有以下xml;

代码语言:javascript
复制
   <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
   <env:Header>
       <mm7:TransactionID xmlns:mm7='http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-4' env:mustUnderstand='1'>6797324d</mm7:TransactionID>
   </env:Header>
   <env:Body>
       <DeliveryReportReq xmlns='http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-4'>
           <MM7Version>6.8.0</MM7Version><MMSRelayServerID>TARAL</MMSRelayServerID>
           <MessageID>T*3*T\*4\*855419761</MessageID>
           <Recipient>
               <RFC2822Address>+61438922562/TYPE=hidden</RFC2822Address>
           </Recipient>
           <Sender>
               <RFC2822Address>61418225661/TYPE=hidden</RFC2822Address>
           </Sender>
           <Date>2011-08-15T12:57:27+10:00</Date>
           <MMStatus>Retrieved</MMStatus>
           <StatusText>The message was retrieved by the recipient</StatusText>
       </DeliveryReportReq>   
   </env:Body>
 </env:Envelope>

那么我有下面的c#代码;

代码语言:javascript
复制
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(file);
XmlNode xNode = xDoc.SelectSingleNode("env:Envelope");

我得到了错误;

名称空间管理器或XsltContext需要。此查询具有前缀、变量或用户定义的函数.

有人知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-17 05:32:41

就我个人而言,我会使用LINQ -它的命名空间支持要容易得多。现在还不清楚为什么要在这里使用XPath,因为Envelope只是根节点--为什么不直接请求根节点?

但是,如果您真的想使用XPath,您可以从XmlDocument中的name表创建一个新的XmlDocument,注册一个前缀,然后将命名空间管理器传递给SelectSingleNode overload which takes one

this answer中有一些示例代码,但我再次强烈建议您考虑其他方法(如果可以的话).特别是使用LINQ,其中搜索(例如)所有"env:Body“元素(这里只有一个,但是.)会像这样:

代码语言:javascript
复制
XNamespace env = "http://schemas.xmlsoap.org/soap/envelope/";
var bodies = doc.Descendants(env + "Body");
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7088291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档