一个如何解析XML文件?
有没有一种简单的方法来解析C#中的XML文件?如果是这样,该怎么办?
解决方案
回答
如果我们使用的是.NET 3.5或者更高版本,我会使用LINQ to XML。
回答
我不确定是否存在"解析XML的最佳实践"。有许多适合不同情况的技术。使用哪种方式取决于具体情况。
我们可以使用LINQtoXML,XmlReader,XPathNavigator或者正则表达式。如果我们详细说明需求,我可以尝试提出一些建议。
回答
使用" XmlTextReader"," XmlReader"," XmlNodeReader"和" System.Xml.XPath"命名空间。以及(XPathNavigator
,XPathDocument
,XPathExpression
,XPathnodeIterator
)。
通常,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甚至会导致高内存使用,并且加载时间非常慢。
当然,如果我们仍然需要内存中的所有数据,那么我们可能没有太多选择。