C#XmlReader - 更短的功能

时间:2014-01-08 18:23:45

标签: c# xml parsing xmlreader

我编写了读取我的XML文件的函数。我可以写得更普遍,更短吗?

我的功能:

XmlTextReader reader = new XmlTextReader ("../../database.xml");
    reader.ReadStartElement("eshop");
    while (reader.Read ()) {
        if (reader.IsStartElement ()) {

            reader.ReadStartElement("item");
            reader.ReadStartElement ("id");
            string elem = reader.ReadString ();
            reader.ReadEndElement ();
            reader.ReadStartElement ("name");
            string name = reader.ReadString ();
            reader.ReadEndElement ();
            reader.ReadStartElement ("cost");
            string cost = reader.ReadString ();
            reader.ReadEndElement ();

            Console.WriteLine (elem + " - name  : " + name + " - cost: " + cost);
        }

    }

示例XML:

<?xml version="1.0" encoding="UTF-8" ?>
<eshop>
    <item>
        <id>1</id>
        <name>some product 1</name>
        <cost>89.90</cost>
    </item>
    <item>
        <id>2</id>
        <name>some product 2</name>
        <cost>95.00</cost>
    </item>
    <item>
        <id>3</id>
        <name>some product 3</name>
        <cost>12.00</cost>
    </item>
</eshop>

如果我要添加新元素,我不知道如何使这个函数更小。现在我必须添加功能,如果我想将我的xml文件升级到其他元素:

    reader.ReadStartElement ("secondelement");
    string secondelement = reader.ReadString ();
    reader.ReadEndElement ();

请帮忙。谢谢。

3 个答案:

答案 0 :(得分:1)

读取XML的最简单方法不是使用XmlReader,而是使用LINQ to XML(使用System.Xml.Linq):

var d = XDocument.Load("../../database.xml");

foreach (var e in d.Root.Elements("item"))
{
    Console.WriteLine(
        (string)e.Element("id") + 
         " - name  : " + (string)e.Element("name") +
         " - cost: " + (string)e.Element("cost"));
}

答案 1 :(得分:0)

看看XDocument类:

http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument(v=vs.110).aspx

然后,您应该可以使用LINQ来读取特定的元素/属性。

类似的问题:

LINQ to read XML

答案 2 :(得分:0)

是的,您可以使用LINQ to XML:

XDocument xDoc = XDocument.Load("../../database.xml");

foreach(var item in xDoc.Descendants("item"))
{
   string id= (string)item.Element("id");
   string name= (string)item.Element("name");
   string cost= (string)item.Element("cost");
   Console.WriteLine("{0} name - {1} - cost {2}",id,name,cost);
}