使用XmlDocument读取XML属性


79

如何使用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()非常好。我只是不知道如何获取属性?

Answers:


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

非常感谢。它确实有效,不需要任何路径,也不需要任何东西。简直太棒了!
纳尼

88

您应该研究XPath。一旦开始使用它,您将发现它比遍历列表更加有效和易于编码。它还使您可以直接获取所需的东西。

然后,代码将类似于

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

请注意,XPath 3.0于2014年4月8日成为W3C建议。


8

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

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

8

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


5

XmlDocument.Attributes也许?(虽然我一直只是迭代属性集合,但其中有一个方法GetNamedItem大概可以实现您想要的功能)


1

假设您的示例文档在字符串变量中 doc

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

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命名空间在这里这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.