Ты почти у цели. Продли свой XPath
"/soap:Envelope/soap:Body/ab:GetWireResponse"
до
"/soap:Envelope/soap:Body/ab:GetWireResponse/ab:GetWireResult/ab:BISearchResponse/bg:Error"
Однако этот дополнительный пролог XML, застрявший там посередине, <?xml version="1.0"?>
, делает XML неправильно сформированным. Я удивлен, что это может быть обработано вообще. Я думаю, что C # API должен выдавать исключение на xmlDoc.LoadXml(result)
.
Другой подход, поскольку вышеприведенное ничего для вас не возвращает, состоит в том, чтобы использовать ваш код C # для изучения структуры документа XML и распечатывать дочерние элементы каждого узла. Например. если вы получаете узел для "/soap:Envelope/soap:Body/ab:GetWireResponse"
, но не для "/soap:Envelope/soap:Body/ab:GetWireResponse/ab:GetWireResult"
, имеет ли ab:GetWireResponse
какие дочерние текстовые узлы, и если да, каковы их значения (содержимое)? Это должно дать представление о том, почему XPath не работает.
Если там есть блок непарсированного (то есть экранированного) XML, вы можете скопировать его и проанализировать как XML, как вы сказали, или просто найти нужный вам шаблон с помощью регулярного выражения ... в зависимости от сложности .