SOAP Webサービスからの応答を解析しようとしていますが、データの一部に無効なxmlns要素があり、問題の原因になっていると思います。Delphi - IXMLNodeの無効なネームスペースURI
私が作業しているXMLの部分は次のとおりです。
<soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<ResponseData xmlns="http://www.example.com/WebServices/Schemas/1">
<ResponseDataResult>
<Messages xmlns="http://www.example.com/WebServices/Schemas/2">
<Message>...</Message>
</Messages>
</ResponseDataResult>
...
</ResponseData>
</soap:Body>
石鹸でのxmlns URI:ボディノードはOKで、無効であるResponseDataにおけるその1は、それがどれも存在しない文書を指します。 Webサービスは、私のコントロール下ので、これは問題外である:(固定ではないことに留意すべきである。
現時点での私のデルファイ(2007)のコードを見て、このような何かが。
var l_tmp,l_tmp2,FSOAPBody:IXMLNode;
begin
...
FSOAPBody := FSOAPEnvelope.ChildNodes.FindNode('Body','http://schemas.xmlsoap.org/soap/envelope/');
//returns the xml above.
if (FSOAPBody = nil) then exit;
l_tmp := FSOAPBody.ChildNodes.FindNode('ResponseData','');
if (l_tmp = nil) or (not l_tmp.HasChildNodes) then exit;
l_tmp2 := l_tmp.ChildNodes.FindNode('ResponseDataResult','');
...
end;
上記のコードでは、空白の名前空間URLをFindNode('ResponseData','')
コードに追加する必要がありました。何も見つからず、nilを返しますが、期待されるXMLを返します。
問題は次の検索ノード(ChildNodes.FindNode('ResponseDataResult','')
)は、l_tmpのChildNodesにアクセスしようとするとアクセス違反が発生します。 l_tmp.xmlと私が期待するXMLであることを確認してください。
名前空間が不足していると思われますので、削除しようとしましたが、読み取り専用の属性であるというエラーが表示されます。
NSに関係なくxmlns属性を削除するかノードを選択する必要はありますか?または私はこの間違っているつもりですか?