Как я могу прочитать атрибут XML с помощью C # XmlDocument?
У меня есть 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()
и это работает очень хорошо. Я просто не могу понять, как получить атрибуты?
c#
.net
xml
xmldocument
Alex
источник
источник
Вам следует изучить XPath . Как только вы начнете его использовать, вы обнаружите, что его намного эффективнее и проще кодировать, чем перебирать списки. Это также позволяет вам напрямую получать то, что вы хотите.
Тогда код был бы похож на
string attrVal = doc.SelectSingleNode("/MyConfiguration/@SuperNumber").Value;
Обратите внимание, что XPath 3.0 стал Рекомендацией W3C 8 апреля 2014 г.
источник
Вы можете перейти на XDocument вместо XmlDocument, а затем использовать Linq, если вы предпочитаете этот синтаксис. Что-то вроде:
var q = (from myConfig in xDoc.Elements("MyConfiguration") select myConfig.Attribute("SuperString").Value) .First();
источник
У меня есть файл 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
.источник
XmlDocument.Attributes
возможно? (У которого есть метод GetNamedItem, который предположительно будет делать то, что вы хотите, хотя я всегда просто повторял коллекцию атрибутов)источник
Предполагая, что ваш пример документа находится в строковой переменной
doc
> XDocument.Parse(doc).Root.Attribute("SuperNumber") 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 здесь и здесь .
источник