Прочитайте атрибут XML за допомогою XmlDocument


79

Як я можу прочитати атрибут XML за допомогою XmlDocument C #?

У мене є XML-файл, який виглядає приблизно так:

<?xml version="1.0" encoding="utf-8" ?>
<MyConfiguration xmlns="http://tempuri.org/myOwnSchema.xsd" SuperNumber="1" SuperString="whipcream">
    <Other stuff />
</MyConfiguration> 

Як прочитати атрибути XML SuperNumber і SuperString?

В даний час я використовую XmlDocument, і я отримую значення між використанням XmlDocument, GetElementsByTagName()і це працює дуже добре. Я просто не можу зрозуміти, як отримати атрибути?

Відповіді:


114
XmlNodeList elemList = doc.GetElementsByTagName(...);
for (int i = 0; i < elemList.Count; i++)
{
    string attrVal = elemList[i].Attributes["SuperString"].Value;
}

Дуже дякую. це дійсно працює, і йому не потрібні ніякі шляхи і нічого. просто чудово !!
Нані

88

Вам слід заглянути в XPath . Як тільки ви почнете використовувати його, ви виявите набагато ефективніший та простіший для кодування, ніж перебирання списків. Це також дозволяє безпосередньо отримувати потрібні речі.

Тоді код буде чимось схожим на

string attrVal = doc.SelectSingleNode("/MyConfiguration/@SuperNumber").Value;

Зверніть увагу, що XPath 3.0 став Рекомендацією W3C 8 квітня 2014 року.


8

Ви можете перейти на XDocument замість XmlDocument, а потім скористатися Linq, якщо вам більше подобається такий синтаксис. Щось на зразок:

var q = (from myConfig in xDoc.Elements("MyConfiguration")
         select myConfig.Attribute("SuperString").Value)
         .First();

8

У мене є файл Xml books.xml

<ParameterDBConfig>
    <ID Definition="1" />
</ParameterDBConfig>

Програма:

XmlDocument doc = new XmlDocument();
doc.Load("D:/siva/books.xml");
XmlNodeList elemList = doc.GetElementsByTagName("ID");     
for (int i = 0; i < elemList.Count; i++)     
{
    string attrVal = elemList[i].Attributes["Definition"].Value;
}

Тепер attrValмає значення ID.


5

XmlDocument.Attributesможливо? (Який має метод GetNamedItem, який, мабуть, буде робити те, що ви хочете, хоча я завжди просто повторював колекцію атрибутів)


1

Припускаючи, що ваш приклад документа міститься у рядковій змінній doc

> XDocument.Parse(doc).Root.Attribute("SuperNumber")
1

1

Якщо ваш XML містить простори імен, ви можете зробити наступне, щоб отримати значення атрибута:

var xmlDoc = new XmlDocument();

// content is your XML as string
xmlDoc.LoadXml(content);

XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());

// make sure the namespace identifier, URN in this case, matches what you have in your XML 
nsmgr.AddNamespace("ns", "urn:oasis:names:tc:SAML:2.0:protocol");

// get the value of Destination attribute from within the Response node with a prefix who's identifier is "urn:oasis:names:tc:SAML:2.0:protocol" using XPath
var str = xmlDoc.SelectSingleNode("/ns:Response/@Destination", nsmgr);
if (str != null)
{
    Console.WriteLine(str.Value);
}

Детальніше про простори імен XML тут і тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.