当前位置:  开发笔记 > 编程语言 > 正文

如何解析XML文件?

如何解决《如何解析XML文件?》经验,为你挑选了9个好方法。

有一种在C#中解析XML文件的简单方法吗?如果是这样,什么?



1> Lukas Šalkau..:

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

这里有些例子:

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

此外,还有一些其他方法可以使用.例如,这里.我认为没有一种最好的方法可以做到这一点; 你总是需要自己选择,最适合你的是什么.


提及XmlDocument的+1,在某些情况下比序列化接口方便得多.如果您在一个特定元素之后,可以使用索引器访问子元素:xmlDoc ["Root"],这些可以链接:xmlDoc ["Root"] ["Folder"] ["Item"]来挖掘层次结构(尽管验证这些元素实际存在是明智的)
一个有女性朋友名单的程序员?恶作剧!

2> Jon Galloway..:

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



3> David Schmit..:

使用一个好的XSD Schema用xsd.exe创建一组类,并使用XmlSerializera从XML创建一个对象树,反之亦然.如果您对模型的限制很少,您甚至可以尝试使用Xml*Attributes在模型类和XML之间创建直接映射.

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

性能提示:构建一个XmlSerializer很昂贵的.XmlSerializer如果要打算/编写多个XML文件,请保留对实例的引用.


很好的例子是来自microsoft的这个例子中间的"Purchase Order Example".http://msdn.microsoft.com/en-us/library/58a18dwa.aspx.您无需创建架构 - 您的c#类是使用C#属性装饰的架构.

4> Simon Steele..:

如果您正在处理大量数据(许多兆字节),那么您希望使用XmlReader流来解析XML.

别的(XPathNavigator,XElement,XmlDocument甚至XmlSerializer如果你保持完整的生成对象图)将导致高内存使用情况,也是一个非常缓慢的加载时间.

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



5> Vinko Vrsalo..:

使用XmlTextReader,XmlReader,XmlNodeReaderSystem.Xml.XPath命名空间.和(XPathNavigator,XPathDocument,XPathExpression,XPathnodeIterator).

通常XPath使阅读XML变得更容易,这正是您可能正在寻找的.


仅供参考,您不应该使用`new XmlTextReader()`或`new XmlTextWriter()`。从.NET 2.0开始不推荐使用它们。请改用`XmlReader.Create()`或`XmlWriter.Create()`。

6> Ash..:

如果您使用的是.NET 2.0,请尝试XmlReader及其子类XmlTextReader,以及XmlValidatingReader.它们提供快速,轻量级(内存使用等),仅向前解析XML文件的方法.

如果您需要XPath功能,请尝试使用XPathNavigator.如果你需要内存中的整个文件试试XmlDocument.



7> PJRobot..:

我刚刚被要求处理一个涉及解析XML文档的应用程序,我同意Jon Galloway的观点,在我看来,基于LINQ to XML的方法是最好的.然而,我确实需要挖掘一些可用的例子,所以不用多说,这里有几个!

任何评论都欢迎,因为这段代码有效,但可能不完美,我想了解更多有关为此项目解析XML的信息!

public void ParseXML(string filePath)  
{  
    // create document instance using XML file path
    XDocument doc = XDocument.Load(filePath);

    // get the namespace to that within of the XML (xmlns="...")
    XElement root = doc.Root;
    XNamespace ns = root.GetDefaultNamespace();

    // obtain a list of elements with specific tag
    IEnumerable elements = from c in doc.Descendants(ns + "exampleTagName") select c;

    // obtain a single element with specific tag (first instance), useful if only expecting one instance of the tag in the target doc
    XElement element = (from c in doc.Descendants(ns + "exampleTagName" select c).First();

    // obtain an element from within an element, same as from doc
    XElement embeddedElement = (from c in element.Descendants(ns + "exampleEmbeddedTagName" select c).First();

    // obtain an attribute from an element
    XAttribute attribute = element.Attribute("exampleAttributeName");
}

通过这些函数,我能够解析XML文件中的任何元素和任何属性都没有问题!



8> Joel Harkes..:

在Addition中,您可以通过以下方式使用XPath选择器(选择特定节点的简便方法):

XmlDocument doc = new XmlDocument();
doc.Load("test.xml");

var found = doc.DocumentElement.SelectNodes("//book[@title='Barry Poter']"); // select all Book elements in whole dom, with attribute title with value 'Barry Poter'

// Retrieve your data here or change XML here:
foreach (XmlNode book in nodeList)
{
  book.InnerText="The story began as it was...";
}

Console.WriteLine("Display XML:");
doc.Save(Console.Out);

文档



9> aku..:

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

你可以去的LINQ to XML,XmlReader,XPathNavigator或者甚至正则表达式.如果你详细说明了你的需求,我可以尝试提出一些建议.


正则表达式为xml.你是怪物.
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有