2009-08-29 2 views
1

У меня есть XML, как это:Получение атрибута из XML

<Action id="SignIn" description="nothing to say here" title=hello" /> 

с помощью LINQ к XML, как я могу получить внутреннее значение идентификатора? Я не на моем Dev машине (машины с соседними не DEV вещи, но так учетными данными), но я не пробовал:

var x = from a in xe.Elements("Action") 
    select a.Attribute("id").Value 

Могу ли я сделать что-то вдоль этих линий? Мне не нужно условие bool. Также, как это будет сделано с использованием традиционных методов XML до появления LINQ (хотя я на .NET 3.5, хотя).

Благодаря

ответ

3

Вы могли бы сделать что-то вроде

XDocument doc = XDocument.Parse("<Action id=\"SignIn\" description=\"nothing to say here\" title=\"hello\" />"); 
var x = from a in doc.Elements("Action") 
     select a.Attribute("id").Value; 

string idValue = x.Single(); //Single() is called for this particular input assuming you IEnumerable has just one entry 

С XmlDocument вы могли бы сделать

XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<Action id=\"SignIn\" description=\"nothing to say here\" title=\"hello\" />"); 
var x = doc.SelectSingleNode("Action/@id"); 
string idValue = x.Value; 

HTH

+0

Хотя я отметил это как ответ, он не работает. Мой XML заключается в следующем: Кормовые Подписки <очертание название =» Omea News "text =" Omea News "description =" Последние новости о семействе продуктов JetBrains Omea "xmlUrl =" http://jetbrains.com/omearss.xml "htmlUrl =" http://www.jetbrains.com/omea " type = "rss" /> Возможно, мне следует использовать xpath? – dotnetdev

+0

Аргумент SelectSingleNode _is_ запроса XPath. Можете ли вы объяснить больше «это не работает»? В чем проблема? Неверный экземпляр xml, который вы копируете: он не закрыт должным образом и между точками с запятой есть точки с запятой. Что вы хотите извлечь из него? –

2

Вот небольшой пример, который показывает, как это сделать:

using System; 
using System.Xml.Linq; 

class Program 
{ 
    static void Main() 
    { 
     String xml = @"<Action 
       id=""SignIn"" 
       description=""nothing to say here"" 
       title=""hello""/>"; 

     String id = XElement.Parse(xml) 
      .Attribute("id").Value; 
    } 
} 
1

Использование "традиционных" методов XML вы могли бы сделать что-то это:

XmlDocument doc = new XmlDocument(); 
doc.Load("XML string here"); 

XmlNode node = doc.SelectSingleNode("Action"); 
string id = node.Attributes["id"].Value 

Эндрю имеет правильный способ сделать это с помощью Linq.

0

Использование традиционного XML-документа, предполагая, что у вас уже есть необходимый узел действия, с помощью SelectSingleNode или путем перемещения документа, вы можете получить значение атрибута id.

ActionNode.Attributes("id").Value 
0

Вы очень много есть, до тех пор, как 'х' является XElement который содержит тот, который вы ищете и элемент «Действие» является первым/единственным элементом «Действие» в XElement:

string x = xe.Element("Action").Attribute("id").Value;

Смежные вопросы