使用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); }