У меня есть сторонний xml, который я пытаюсь проанализировать.Получить pseudo xml внутри структуры xml
Вопрос аналогичен this one тем, что я ищу, чтобы получить код псевдо xml, закодированный внутри одного из элементов. Однако мне нужен другой результат.
Вот XML, который возвращается:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<PostApplication_V6Response xmlns="http://xxxService.org/">
<PostApplication_V6Result>string</PostApplication_V6Result>
</PostApplication_V6Response>
</soap:Body>
</soap:Envelope>
Я использую Linq для XML - Я могу вернуть элемент <PostApplication_V6Result>
- это lowesst элемент в дереве я могу получить.
Используя этот код:
var name = "{http://xxxService.org/}PostApplication_V6Result";
var soap = XDocument.Parse(result)
.Descendants(name)
.First();
Тем не менее, значение, содержащееся внутри этого элемента является своего рода псевдо XML - не XML, но XML-двойник.
Вот что содержится внутри:
<xxxService>
<Application>
<Status>Accepted</Status>
<RedirectUrl>http://www.google.com?abc=123</RedirectUrl>
<Value>100</Value>
</Application>
</xxxService>
Я пробовал почти все, чтобы получить данные, но я получаю либо неверный символ «=» ошибки или данные в корневом недействительном сообщении.
В идеале я хочу получить данные, в том числе в пределах узла «Приложение», в состояние, в котором я могу запустить его через общий парсер, как тот, который приведен ниже, но если мне нужно будет что-то вручную сделать. Я пытался решить это уже пару дней.
public static T Deserialise<T>(this XElement element)
{
var serializer = new XmlSerializer(typeof(T));
using (var reader = element.CreateReader())
{
return (T)serializer.Deserialize(reader);
}
}
Любая помощь оценивается.
UPDATE
Вот полный XML Thats returned-, как вы можете видеть, что внутренняя часть фактически является HTML не XML.
<soap:body><postapplication_v6response xmlns="http://xxxService.org/"><postapplication_v6result><xxxService>
<Application>
<Status>PURCHASED</Status>
<RedirectURL>http://www.google.com?test=abc&xyz=123</RedirectURL>
</Application>
</xxxService>
</postapplication_v6result></postapplication_v6response></soap:body></soap:envelope>
вы можете разместить полный xml? похоже, что ваш сервис не возвращает действительный xml? – Ewan
, если содержимое узла представляет собой строку, содержащую символы xml, вы должны обернуть ее в [CData] или убрать ее – Ewan
@Ewan - добавлен код Ewan - как вы можете видеть, внутренняя часть - html, а не xml. –