我正试图使用带有RestSharp和Linq的C#.NET来使用Axis2 REST XML响应。然而,我似乎无法使用RestSharp或手动序列化XML响应。
这是Axis2:的XML响应示例
<ns:response xmlns:ns="http://com.some.where" xmlns:ax2488="http://com.some.where/xsd">
<ns:return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax2488:Book">
<ax2488:field1>Orson Scott Card</ax2488:field1>
<ax2488:field1>Some One Else</ax2488:field1>
<ax2488:field2>1</ax2488:field2>
<ax2488:isbn10>142996393X</ax2488:isbn10>
<ax2488:isbn13>9781429963930</ax2488:isbn13>
<ax2488:date>2010</ax2488:date>
<ax2488:blah>Tom Doherty Associates</ax2488:blah>
<ax2488:ssss>on loan</ax2488:ssss>
<ax2488:name>Ender's Game Volume 1 of The Ender Quintet</ax2488:name>
</ns:return>
当我试图使用XElements(Linq)获得元素时,我总是得到null?
var elements = root.Elements("Book");
我尝试了几个不同的元素名称,但没有成功。
此外,使用RestSharp,它成功地获得了第一个也是唯一的响应,但是如果我有多个响应,它会返回null。
var response1 = _client.Execute<Book>(request);
var response2 = _client.Execute<List<Book>>(request);
感谢您的帮助。
一种可能的方法,将XDocument
与XPath查询一起使用:
using System.Xml.XPath;
var nsmgr = new XmlNamespaceManager(new NameTable());
//register prefixes for use in XPath
nsmgr.AddNamespace("ns", "http://com.some.where");
nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
var xpath = "//ns:response/ns:return[@xsi:type='ax2488:Book']";
//above xpath consists of path from root to <ns:return> : //ns:response/ns:return
//and criteria for <ns:return> : [@xsi:type='ax2488:Book']
var doc = XDocument.Load("path_to_xml_file.xml");
var returnElements = doc.XPathSelectElements(xpath, nsmgr);
我假设您的XML结构大致如下:
<root>
<ns:response xmlns:ns="http://com.some.where" xmlns:ax2488="http://com.some.where/xsd">
<ns:return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax2488:Book">
<ax2488:field1>Orson Scott Card</ax2488:field1>
<ax2488:field1>Some One Else</ax2488:field1>
<ax2488:field2>1</ax2488:field2>
<ax2488:isbn10>142996393X</ax2488:isbn10>
<ax2488:isbn13>9781429963930</ax2488:isbn13>
<ax2488:date>2010</ax2488:date>
<ax2488:blah>Tom Doherty Associates</ax2488:blah>
<ax2488:ssss>on loan</ax2488:ssss>
<ax2488:name>Ender's Game Volume 1 of The Ender Quintet</ax2488:name>
</ns:return>
</ns:response>
<ns:response xmlns:ns="http://com.some.where" xmlns:ax2488="http://com.some.where/xsd">
........
</ns:response>
........
........
</root>