XML新手。我有第三方Web服務,提供一個XML文檔,我必須更新元素值並傳回。核心問題是在下面的代碼中調用node.RemoveAll()方法時出現NullReferenceException錯誤。我調用RemoveAll()方法是因爲每個元素在提供給我時都具有xsi:nil屬性,並且如果在更新元素值之前不刪除它,則XML將不會由webservice驗證。在XML文檔中選擇節點時返回空值
由第三方Web服務提供的XML文檔如下:我已經看到了使用XmlNamespaceManager的
<?xml version="1.0" encoding="utf-16"?>
<TaskData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schema.sample.com/application/1/520800B">
<Global>
<RequestInfo xmlns="http://schema.sample.com/application/1/Types">
<Requestor xsi:nil="true" />
<Date_init xsi:nil="true" />
<Shipto xsi:nil="true" />
<Customer xsi:nil="true" />
<Contact xsi:nil="true" />
<Requestor_Email xsi:nil="true" />
</RequestInfo>
</Global>
</TaskData>
其他的解決方案,但我一直無法使它發揮作用。此xml文檔具有爲TaskData元素指定的名稱空間以及用於RequestInfo元素的不同名稱空間。我試着爲每個命名空間指定XmlNamespaceManager變量,但得到了相同的結果....在中斷模式下懸停在nsmgr變量上顯示「子項無法評估」,並且DefaultNamespace屬性爲空字符串。
Public Sub testxml()
Dim doc As New XmlDocument
doc.Load("c:\temp\sample.xml")
Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("s", "http://schema.sample.com/application/1/520800B")
Dim node As XmlNode = doc.SelectSingleNode("s:Requestor", nsmgr)
node.RemoveAll()
node.InnerText = "Your Name Goes Here"
doc.Save("c:\temp\sample.xml")
End Sub
神話般的格雷格!忽略你建議的NS工作的選項是我喜歡的,因爲我無法控制第三方webservice分配的命名空間。我嘗試了「// s:Requestor」,但沒有奏效。 – Don 2009-06-09 21:54:55