我有这个代码:
/*string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>";*/ string theXml = @"<Response><Result><TheBool>true</TheBool><TheId>1</TheId></Result></Response>"; XDocument xmlElements = XDocument.Parse(theXml); var elements = from data in xmlElements.Descendants("Result") select new { TheBool = (bool)data.Element("TheBool"), TheId = (int)data.Element("TheId"), }; foreach (var element in elements) { Console.WriteLine(element.TheBool); Console.WriteLine(element.TheId); }
当我将第一个值用于theXml时,结果为null,而对于第二个值,我具有良好的值…
如何使用Linq到xmlns值的Xml?
LINQ到XML的方法,如Descendants并Element采取XName作为参数。有一个从转换string到XName时自动发生的事情给你。您可以通过XNamespace在Descendants和Element调用中的字符串之前添加一个来解决此问题。请注意,因为您有两个不同的名称空间在工作。
Descendants
Element
XName
string
XNamespace
string theXml = @"true1"; //string theXml = @"true1"; XDocument xmlElements = XDocument.Parse( theXml ); XNamespace ns = "http://myvalue.com"; XNamespace nsa = "http://schemas.datacontract.org/2004/07/My.Namespace"; var elements = from data in xmlElements.Descendants( ns + "Result" ) select new { TheBool = (bool) data.Element( nsa + "TheBool" ), TheId = (int) data.Element( nsa + "TheId" ), }; foreach ( var element in elements ) { Console.WriteLine( element.TheBool ); Console.WriteLine( element.TheId ); }
注意ns中的ns Descendants和nsa中的使用Elements
Elements