Поиск и получение строки в XML с определенным атрибутом в C # - PullRequest
0 голосов
/ 27 сентября 2018

У меня проблема с получением строки из XML, которая содержит:

<label lang=

Эти фразы могут стоять отдельно или с другими атрибутами.Например:

<result>
    <label lang="EN">Result</label>
</result>

Или

<refusal>
    <label lang="EN">Refused</label>
    <desc lang="EN" />
</refusal>

Мне нужно получить полную строку с фразой метки. Сейчас я использую XDocument из LINQ в C #и сейчас я могу проникнуть внутрь этого.В предыдущем примере это:

Отказался

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Вот пример:

   var text = @"<refusal>
        <label lang=""EN"">Refused</label>
        <desc lang=""EN"" />
    </refusal>";
   var xdoc = XDocument.Parse(text);
   var elements = xdoc.Root.Elements()
       .Where(x => x.Name.LocalName == "label" && x.Attributes().Any(a => a.Name.LocalName == "lang" && a.Value == "EN"));
   Console.WriteLine(elements.First().ToString()); // Output: <label lang="EN">Refused</label>

Обратите внимание, что он не проверяет пространство имен элемента (я не уверен, что вам это нужно), поэтому такие элементы, как "", также будут включены.

0 голосов
/ 27 сентября 2018

Я предполагаю, что вы хотите получить каждый элемент внутри вашего тега "result" и проверить, есть ли у него атрибут с именем lang.Если это так, выведите всю эту штуку (например, <label lang="EN">Refused</label>)

XmlNodeList aNode = xdoc.GetElementsByTagName("result");
XmlNodeList bNode = aNode[0].ChildNodes;

foreach (XmlNode item in bNode)
{
    try
    {
        string s = item.Attributes["lang"].OuterXml;
    }
    catch
    {
        //the item doesn't have the attribute lang
    }
}

Я бы подошел к этой проблеме следующим образом.Если узел не содержит атрибута, он выдаст ошибку, которую я обработаю с помощью try и catch

Если вам нужна дополнительная помощь или объяснение, оставьте комментарий

XmlNodeесть несколько хороших способов получить текст элемента, например InnerText, InnerXml или OuterXml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...