2011-05-15 61 views
0

問題是ServiceDocument作爲其xmlns屬性。由於屬性卡在元素上,無法解析XML

---預賦值的XML

System.Xml.XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?> 
        <ServiceDocument 
         xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" 
         xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" 
        > 
        <BaseUri> 
         http://xxxx.xxxxx.net/xxx.1/ 
        </BaseUri> 
        <ProfilesLink> 
        http://adf.apis.dds.net/af.1/ 
       </ProfilesLink> 
       <SignedInUser> 
         <Cid> 
          4433sfsdfgd 
         </Cid> 
         <Uri> 
          http://fd.apis.afdafd.net/V4.1/cid-xxxxx/adad 
         </Uri> 
       </SignedInUser> 
       <StatusMessageLink> 
         http://psm.adfa.afd.net/dfa.1/ 
       </StatusMessageLink> 
      </ServiceDocument>" 
      ); 
// Response.Write(xmlDoc.InnerXml); 

- //解析XML的問題是低於**

Response.Write(xmlDoc.SelectSingleNode("/ServiceDocument/BaseUri").InnerXml); 
+1

的 「屬性」 是默認名稱空間聲明。谷歌的「XPath默認命名空間」,你會發現一個億的答案。 – 2011-05-15 08:17:41

回答

6

您需要分配短別名使用XMLNamespaceManager的命名空間。

查看this page舉例。

所以,解決你的問題:

var xmlNamespaceManager = new XmlNamespaceManager(xmlDoc.NameTable); 
xmlNamespaceManager.AddNamespace("ds", "http://schemas.microsoft.com/ado/2007/08/dataservices"); 
var result = xmlDoc.SelectNodes("/ds:ServiceDocument/ds:BaseUri", xmlNamespaceManager);