2011-08-31 117 views
1

在以下代碼中,SelectSingleNode返回null。當元素存在時,XmlNodeList.SelectSingleNode()返回null

XmlDocument xmlresp = GetXMLWebRequest(URL, PayLoad, ""); 
XmlNodeList elemList = xmlresp.GetElementsByTagName("Document"); 
for (int i = 0; i < elemList.Count - 1; i++) 
{ 
    byte[] b = System.Convert.FromBase64String(elemList.Item(i).SelectSingleNode("Page/Value").Value); 
} 

在這種情況下elemList.Item(i)值是在如下狀態,我看到OuterXml頁/值節點。

elemList.Item(i.OuterXml)如下。

<Document xmlns=\"http://integration.fiapi.com\"> 
    <ID>1</ID> 
    <Date>2006-03-19</Date> 
    <Class>Check</Class> 
    <Type>GetImage</Type> 
    <Page Number=\"1\" Format=\"jpg\" View=\"F\"> 
    <Value> 
     /9j/4AAQSkZJRgABAgIAyQDJAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCALgBogBAREA/8QA0gAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy 
WccE3hnSr2Rc5nnkhDvkk8hJlXjpwB09easf8JD8c/+hM0P/v8AL/8AJFH/AAkPxz/6EzQ/+/y//JFZepXvx/vrhZbfTLTT0CBTFataMpOT8x8x3OecdccDjrmn/wAZD/5/s+oLqy/aCvPI81518mVZl8meziyw6BthG5eeVbKnuDV+xuP2grS8jnmsoL2Nc5gnNmEfII5KMrcdeCOnpxVc/D74yazLNqU3ij+ypLqV5TYjVrgCDLH5VCblC+gDHAx3rQtfAvxps9OnsYvHFi0M27c01zJLIMjB2yPCXXgcbSMHkYPNZ/8Awqz4v/8AQ+/+Vi7/APiKP+FWfF//AKH3/wArF3/8RWhd+APi/d6Pp2nf8JbYw/YfN/0mHUrtZrje2796235tvRemBWf/AMKs+L//AEPv/lYu/wD4ij/hVnxf/wCh9/8AKxd//EUf8Ks+L/8A0Pv/AJWLv/4ij/hVnxf/AOh9/wDKxd//ABFH/CrPi/8A9D7/AOVi7/8AiKuab8J/ibLcMuqfEe7toNhKva31zOxbI4KsUAGM857DjnjU/wCFQeMP+is65+U3/wAfo/4VB4w/6Kzrn5Tf/H6P+FQeMP8AorOuflN/8frn/wDhmX/qbv8Aym//AG2j/hmX/qbv/Kb/APbaP+GZf+pu/wDKb/8AbauSfs96lNpcOly+Prt9PhffFaNZsYkbnlU87APzNy 
ayST+GXluDE1xkZ2vuhXAIUBoWORkEuTj1sfAPwlC/wAPtXu9RhkaDXXa3aMyDbJboGTI2/MpLPKp5B+UEY6nkPCvia28J/CHx34Z1ARx61FcSwG1knRS5lVYG2YJLlCjM2BjGOecjU8F6PZ/CD4tWuna5q0Df2johLXJxFDBIX3FSzsMr+5IDcEll+UVb8BQTX3wo+I/iu7ikiu9 
    </Value> 
    </Page> 
</Document> 
+0

你能提供實際的XML而不是字符串被改寫的起來呢?我當然沒有看到任何看起來有Page/Value路徑的東西,這就是爲什麼你會得到空值。 – dotnetnate

+0

我想在這裏粘貼xml我不知道發生了什麼? – user228777

回答

1

的問題是,無論是<Page><Value>元素是http://integration.fiapi.com命名空間下(將它應用到的<Document>所有後代),並且尚未在SelectSingleNode查詢中指定一個命名空間。

可以刪除命名空間,或者修改查詢,如下所示:

XmlNamespaceManager mgr = new XmlNamespaceManager(xmlresp.NameTable); 
mgr.AddNamespace("ns", "http://integration.fiapi.com"); 

for (int i = 0; i < elemList.Count; ++i) 
{ 
    XmlNode node = elemList[i].SelectSingleNode("ns:Page/ns:Value", mgr); 
    // ... convert node.Value as needed 
} 
+0

感謝您的快速回復!我試過你的解決方案,現在節點元素不是null,但是elemList.Item(i).SelectSingleNode(「ns:Page/ns:Value」,mgr)。該值返回爲null。 – user228777

+0

對於'XmlElement'的'XmlNode',你需要使用'InnerText'字段來返回它的「值」。文本實際上是DOM中的一個節點,這就是爲什麼元素的值未定義的原因:http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.value.aspx –

+0

謝謝史蒂夫爲您提供快速幫助! – user228777

1

給這一個鏡頭:

XmlNamespaceManager nsManager; 

nsManager = new XmlNamespaceManager(doc.NameTable); 

nsManager.AddNamespace("fi", "http://integration.fiapi.com"); 

elementList.Item(i).SelectSingleNode("fi:Page/fi:Value", nsManager);