一个如何解析XML文件?

时间:2020-03-05 18:51:14  来源:igfitidea点击:

有没有一种简单的方法来解析C#中的XML文件?如果是这样,该怎么办?

解决方案

回答

如果我们使用的是.NET 3.5或者更高版本,我会使用LINQ to XML。

回答

我不确定是否存在"解析XML的最佳实践"。有许多适合不同情况的技术。使用哪种方式取决于具体情况。

我们可以使用LINQtoXML,XmlReader,XPathNavigator或者正则表达式。如果我们详细说明需求,我可以尝试提出一些建议。

回答

使用" XmlTextReader"," XmlReader"," XmlNodeReader"和" System.Xml.XPath"命名空间。以及(XPathNavigatorXPathDocumentXPathExpressionXPathnodeIterator)。

通常,XPath使我们更容易阅读XML。

回答

如果我们使用的是.NET 2.0,请尝试使用" XmlReader"及其子类" XmlTextReader"和" XmlValidatingReader"。它们提供了一种快速,轻量级(内存使用等),仅向前的方式来解析XML文件。

如果需要XPath功能,请尝试XPathNavigator。如果我们需要整个文档存储在内存中,请尝试XmlDocument

回答

非常简单。我知道这些是标准方法,但是我们可以创建自己的库来更好地处理。

这里有些例子:

XmlDocument xmlDoc= new XmlDocument(); // Create an XML document object
xmlDoc.Load("yourXMLFile.xml"); // Load the XML document from the specified file

// Get elements
XmlNodeList girlAddress = xmlDoc.GetElementsByTagName("gAddress");
XmlNodeList girlAge = xmlDoc.GetElementsByTagName("gAge"); 
XmlNodeList girlCellPhoneNumber = xmlDoc.GetElementsByTagName("gPhone");

// Display the results
Console.WriteLine("Address: " + girlAddress[0].InnerText);
Console.WriteLine("Age: " + girlAge[0].InnerText);
Console.WriteLine("Phone Number: " + girlCellPhoneNumber[0].InnerText);

另外,还有其他一些方法可以使用。例如,在这里。我认为没有最佳方法可以做到这一点。我们总是需要自己选择,最适合选择。

回答

使用良好的XSD架构通过xsd.exe创建一组类,并使用XmlSerializer从XML中创建对象树,反之亦然。如果对模型的限制很少,我们甚至可以尝试使用Xml * Attributes在模型类和XML之间创建直接映射。

在MSDN上有一篇有关XML序列化的介绍性文章。

性能提示:构建`XmlSerializer'的开销很大。如果我们打算解析/写入多个XML文件,请保留对XmlSerializer实例的引用。

回答

如果我们正在处理大量数据(许多兆字节),那么我们想使用XmlReader来流解析XML。

其他任何东西(如果保留完整的生成的对象图,则XPathNavigator,XElement,XmlDocument和XmlSerializer甚至会导致高内存使用,并且加载时间非常慢。

当然,如果我们仍然需要内存中的所有数据,那么我们可能没有太多选择。