使用LINQ到XML与XML命名空间 [英] Use Linq to Xml with Xml namespaces
问题描述
我有这样的code:
/*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的第一个值,结果为空,而在第二个,我有很好的价值...
When I use the first value for theXml, the result is null, whereas with the second one, I have good values ...
如何使用的xmlns值使用LINQ到XML?
How to use Linq to Xml with xmlns values ?
推荐答案
的LINQ to XML的方法,如后裔
和元素
采取的XName
作为参数。有一个从字符串
到的XName
转换是自动发生的为您服务。您可以通过添加一个的XNamespace
在后裔字符串之前
和元素解决这个问题code>来电。当心,因为你在工作中有2个不同的命名空间。
LINQ to XML methods like Descendants
and Element
take an XName
as an argument. There is a conversion from string
to XName
that is happening automatically for you. You can fix this by adding an XNamespace
before the strings in your Descendants
and Element
calls. Watch out because you have 2 different namespaces at work.
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 );
}
通知后人利用纳秒
和NSA在元素
这篇关于使用LINQ到XML与XML命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!