Jak odczytać atrybut XML przy użyciu XmlDocument w języku C #?
Mam plik XML, który wygląda mniej więcej tak:
<?xml version="1.0" encoding="utf-8" ?>
<MyConfiguration xmlns="http://tempuri.org/myOwnSchema.xsd" SuperNumber="1" SuperString="whipcream">
<Other stuff />
</MyConfiguration>
Jak odczytać atrybuty XML SuperNumber i SuperString?
Obecnie używam XmlDocument i uzyskuję wartości pomiędzy używaniem XmlDocument, GetElementsByTagName()
a to działa naprawdę dobrze. Po prostu nie mogę dowiedzieć się, jak uzyskać atrybuty?
c#
.net
xml
xmldocument
Alex
źródło
źródło
Powinieneś zajrzeć do XPath . Gdy zaczniesz go używać, przekonasz się, że jest on dużo bardziej wydajny i łatwiejszy do kodowania niż iterowanie po listach. Pozwala także bezpośrednio uzyskać to, czego chcesz.
Wtedy kod byłby podobny do
string attrVal = doc.SelectSingleNode("/MyConfiguration/@SuperNumber").Value;
Zauważ, że XPath 3.0 stał się rekomendacją W3C 8 kwietnia 2014.
źródło
Możesz przeprowadzić migrację do XDocument zamiast XmlDocument, a następnie użyć Linq, jeśli wolisz tę składnię. Coś jak:
var q = (from myConfig in xDoc.Elements("MyConfiguration") select myConfig.Attribute("SuperString").Value) .First();
źródło
Mam plik XML books.xml
<ParameterDBConfig> <ID Definition="1" /> </ParameterDBConfig>
Program:
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; }
Teraz
attrVal
ma wartośćID
.źródło
XmlDocument.Attributes
być może? (Który ma metodę GetNamedItem, która prawdopodobnie zrobi to, co chcesz, chociaż zawsze powtarzałem kolekcję atrybutów)źródło
Zakładając, że przykładowy dokument znajduje się w zmiennej łańcuchowej
doc
> XDocument.Parse(doc).Root.Attribute("SuperNumber") 1
źródło
Jeśli Twój kod XML zawiera przestrzenie nazw, możesz wykonać następujące czynności, aby uzyskać wartość atrybutu:
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); }
Więcej o przestrzeniach nazw XML tutaj i tutaj .
źródło