WP7 Linq to XML для получения дочернего элемента XElement по имени - PullRequest
1 голос
/ 11 декабря 2010

Я знаю, что это довольно простой вопрос, но я не смог заставить его работать даже после того, как посмотрел ответы на 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.Я хочу получить узел "ошибка". Этот вопрос говорит о том, что вам нужно обработать пространство имен.Я пробовал свой запрос с пространством имен и без него, и он не работает в любом случае.

Запрос с пространством имен:

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.Все учебники, которые я прочитал, используют эту запись для выбора элемента по имени, но он не работает для меня.

Ответы [ 2 ]

1 голос
/ 11 декабря 2010

Это коды Работает на моей машине & trade;:

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.

0 голосов
/ 11 декабря 2010

Есть ли вероятность, что вы читаете весь документ вместо 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...