使用XmlDocument读取XML属性

我如何使用C#的XmlDocument读取XML属性?

我有一个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()获取值,而且工作得很好。 我只是不知道如何获得属性?

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

你应该看看XPath 。 一旦你开始使用它,你会发现它比遍历列表更有效,更容易编码。 它也可以让你直接得到你想要的东西。

那么代码将是类似的东西

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

你可以迁移到XDocument而不是XmlDocument,然后使用Linq,如果你喜欢这种语法。 就像是:

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

XmlDocument.Attributes也许? (其中有一个方法GetNamedItem可能会做你想做的,虽然我总是迭代属性集合)

我有一个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的值。

假设您的示例文档位于stringvariablesdoc

 > 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命名空间。

我已经这样做了:

 XmlDocument d = new XmlDocument(); d.Load("http://your.url.here"); List<string> items = new List<string>(); foreach (XmlAttribute attr in d.DocumentElement.Attributes) { items.Add(attr.LocalName); }