XML の新機能。要素の値を更新して戻す必要がある XML ドキュメントを提供するサード パーティの Web サービスがあります。核となる問題は、以下のコードで node.RemoveAll() メソッドを呼び出すときに NullReferenceException エラーが発生することです。各要素には、提供されたときに xsi:nil 属性があるため、RemoveAll() メソッドを呼び出しています。要素の値を更新する前にそれを削除しないと、XML は Web サービスによって検証されません。
サード パーティの Web サービスによって提供される XML ドキュメントは次のとおりです。
<?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>
私が見た他のソリューションでは XmlNamespaceManager を使用していましたが、機能させることができませんでした。この 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