如何在.NET中读取XML?

sri*_*ger 30 c# xml

XML noob在这里!所以我有一些xml数据:

<DataChunk>
    <ResponseChunk>
        <errors>
            <error code=\"0\">
                Something happened here: Line 1, position 1.
            </error>
        </errors>
    </ResponseChunk>
</DataChunk>
Run Code Online (Sandbox Code Playgroud)

如何获取"错误"列表,我可以访问"错误代码"和以下文本说明?另外,我在c#中使用.net4.0 ...谢谢!

MrE*_*yes 56

将XML加载到一个XmlDocument然后使用xpath查询来提取所需的数据.

例如

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlstring);

XmlNode errorNode = doc.DocumentElement.SelectSingleNode("/DataChunk/ResponseChunk/Errors/error");

string errorCode = errorNode.Attributes["code"].Value;
string errorMessage = errorNode.InnerText;
Run Code Online (Sandbox Code Playgroud)

如果XML有可能存在多个错误元素,则可以使用它SelectNodesXmlNodeList包含该xpath中的所有元素.例如:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlstring);

XmlNodeList errorNodes = doc.DocumentElement.SelectNodes("/DataChunk/ResponseChunk/Errors/error");

foreach(XmlNode errorNode in errorNodes)
{
  string errorCode = errorNode.Attributes["code"].Value;
  string errorMessage = errorNode.InnerText;
}
Run Code Online (Sandbox Code Playgroud)

选项2

如果您有XML的XML架构,则可以将架构绑定到类(使用.NET xsd.exe工具).完成后,您可以将XML反序列化为对象,并使用该对象而不是原始XML进行处理.这本身就是一个完整的主题,所以如果你有模式,那么值得研究.


Jos*_*ger 23

您可以使用Linq to XML:

var doc = XDocument.Parse(xml);
var errors = from e in doc.Descendants("error")
             select new
             {
                code = e.Attribute("code").Value,
                msg = e.Value.Trim()
             };

foreach (var e in errors)
{
    // use e.code & e.msg
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您的输入XML 非常大,那么最好使用XMLReader.