2009-06-01 78 views
67

如何使用C#的XmlDocument读取XML属性?使用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和超弦理论?

目前我使用的是XmlDocument,并且我使用XmlDocument的GetElementsByTagName()获得了两者之间的值,这非常适用。我只是不知道如何获得属性?

回答

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

太感谢你了。它确实有效,它不需要任何路径,也不需要任何东西。简直棒极了! – Nani 2016-10-19 10:32:42

5

XmlDocument.Attributes也许? (其中有一个方法GetNamedItem,将可能做你想做的,但我一直只是重复的属性集合)

81

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

然后代码将是类似的东西,以

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

可以迁移到的XDocument代替的XmlDocument,然后使用Linq如果你喜欢的语法。喜欢的东西:

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

我有一个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; 
} 

attrValID值。

1

假设您的示例文件是字符串变量doc

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

如果你的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名称空间的更多信息,请参阅herehere

0

我已经做到了这一点:

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