我知道这是一个有点简单的问题,但即使在查看SO和LINQ to XML教程的答案之后,我也无法使其工作。我正在使用Windows Phone 7,但我认为这不应该有所作为。
我的XML看起来像这样:
<response xmlns="http://anamespace.com/stuff/">
<error code="ERROR_CODE_1">You have a type 1 error</error>
</response>
我将上面的XML加载到XElement中。我想得到“错误”节点。 This question表示您需要处理命名空间。我已尝试使用和不使用命名空间的查询,但无论如何都无法正常工作。
使用命名空间查询:
private object ParseElement(XElement responseElement)
{
XNamespace ns = "http://anamespace.com/stuff/";
IEnumerable<XElement> errorNodes = from e in responseElement.Elements(ns + "error") select e;
}
不带命名空间的查询:
private object ParseElement(XElement responseElement)
{
IEnumerable<XElement> errorNodes = from e in responseElement.Elements("error") select e;
}
errorNodes变量永远不会被XElements填充。我读过的教程都使用这种符号来按名称选择一个元素,但它对我不起作用。
答案 0 :(得分:1)
此代码在我的机器上运行™:
XElement response = XElement.Parse(
@"<response xmlns=""http://anamespace.com/stuff/"">
<error code=""ERROR_CODE_1"">You have a type 1 error</error>
</response>");
XNamespace ns = "http://anamespace.com/stuff/";
XElement error = response.Element(ns + "error");
string code = (string)error.Attribute("code");
string message = (string)error;
Console.WriteLine(code);
Console.WriteLine(message);
我的机器运行常规的.NET 4,所以也许您可以运行此代码并检查它是否适用于WP7。
答案 1 :(得分:0)
您是否有机会阅读整篇文档而不是error
元素?
如果您使用Descendants
代替Elements
吗?
[TestMethod]
public void CanGetErrorElements()
{
string xml = @"
<response xmlns=""http://anamespace.com/stuff"">
<error code=""ERROR_CODE_1"">You have a type 1 error</error>
</response>";
XDocument doc = XDocument.Parse(xml);
XNamespace ns = "http://anamespace.com/stuff";
var errorNodes = from e in doc.Descendants(ns + "error")
select e;
Assert.IsTrue(errorNodes.Count() > 0);
}