使用命名空间从 XML 加载对象
本文关键字:加载 对象 XML 命名空间 | 更新日期: 2023-09-27 17:56:21
我环顾四周,无法实现满足我需求的解决方案。如果这看起来像是一个重复的问题,我深表歉意。
我正在查询 IDOL 服务,需要从 xml 响应加载对象。
给出示例 xml:
<autnresponse xslns:autn="http://schemas.autonomy.com/aci/">
<action>QUERY</action>
<response>SUCCESS</response>
<responsedata>
<autn:numhits>2</autn:numhits>
<autn:totalhits>2</autn:totalhits>
<autn:totaldbdocs>2</autn:totaldbdocs>
<autn:totaldbsecs>2</autn:totaldbsecs>
<autn:hit>
<autn:reference>http://blah</autn:reference>
<autn:title>my title</autn:title>
</autn:hit>
<autn:hit>
<autn:reference>http://blah</autn:reference>
<autn:title>my title</autn:title>
</autn:hit>
</responsedata>
</autnresponse>
我正在尝试使用 linq 到 XML 加载自定义对象的列表。
这是我尝试过的代码,我总是没有得到任何结果。
var namespaceManager = new XmlNamespaceManager(new NameTable());
namespaceManager.AddNamespace("autn", "http://schemas.autonomy.com/aci/");
。加载Xelemet.....
IEnumerable<XElement> urls = raw.Elements(IDOLModule.GetNamespace()+ "hit");
foreach (var single in urls)
{
var t = new url();
t.Title="";
t.Url="";
listURL.Add(t);
}
urls 变量始终返回空。我只需要定位 autn:hit 节点并将其数据加载到对象中。
干杯
你可以尝试这样的事情:
XElement doc = XElement.Parse(@"<autnresponse xmlns:autn=""http://schemas.autonomy.com/aci/"">
<action>QUERY</action>
<response>SUCCESS</response>
<responsedata>
<autn:numhits>2</autn:numhits>
<autn:totalhits>2</autn:totalhits>
<autn:totaldbdocs>2</autn:totaldbdocs>
<autn:totaldbsecs>2</autn:totaldbsecs>
<autn:hit>
<autn:reference>http://blah</autn:reference>
<autn:title>my title</autn:title>
</autn:hit>
<autn:hit>
<autn:reference>http://blah</autn:reference>
<autn:title>my title</autn:title>
</autn:hit>
</responsedata>
</autnresponse>");
XNamespace ns = ("http://schemas.autonomy.com/aci/");
//Console.WriteLine(doc.Descendants(ns + "numhits").First().Value);
IEnumerable<XElement> hits=doc.Descendants(ns + "hit");
foreach (XElement h in hits){
Console.WriteLine(String.Format("{0} - {1}",h.Name.ToString(),h.Elements().First().Value));
};