从Web读取XML并显示内容

时间:2011-07-30 16:30:11

标签: c# xml streamreader xmlreader

我正在通过网络阅读文件:

<?xml version='1.0' encoding='UTF-8'?>
<eveapi version="2">
  <currentTime>2011-07-30 16:08:53</currentTime>
  <result>
    <rowset name="characters" key="characterID" columns="name,characterID,corporationName,corporationID">
      <row name="Conqrad Echerie" characterID="91048359" corporationName="Federal Navy Academy" corporationID="1000168" />
    </rowset>
  </result>
  <cachedUntil>2011-07-30 17:05:48</cachedUntil>
</eveapi>

我还是XML的新手,我看到有很多方法可以读取XML数据,我是否有某种方式想要这样做?我想要做的是将所有数据加载到StreamReader中?然后使用get;组;以后提取数据?

3 个答案:

答案 0 :(得分:1)

如果您想要基于对象的访问,请将示例xml放在文件中并运行

xsd.exe my.xml
xsd.exe my.xsd /classes

这将创建my.cs,它是一个类似于xml的对象模型,可以与XmlSerializer一起使用:

var ser = new XmlSerializer(typeof(eveapi));
var obj = (eveapi)ser.Deserialize(source);

答案 1 :(得分:0)

答案 2 :(得分:0)

如果您需要以简单的方式使用数据,尤其是在您刚接触XML时,请使用XmlDocument。 要加载文档:

using System.Xml;
using System.IO;
public class someclass {
    void somemethod () {
        //Initiate the XmlDocument object
        XmlDocument xdoc;
        //To load from file
        xdoc.Load("SomeFolder\\SomeFile.xml");
        //Or to load from XmlTextReader, from a file for example
        FileStream fs = FileStream("SomeFolder\\SomeFile.xml", FileMode.Open, FileAccess.Read);
        XmlTextReader reader = new XmlTextReader(fs);
        xdoc.Load(reader);
        //In fact, you can load the stream directly
        xdoc.Load(fs);

        //Or, you can load from a string
        xdoc.LoadXml(@"<rootElement>
                    <element1>value1</element1>
                    <element2>value2</element2>
                    </rootElement>");
    }
}

我个人觉得XmlDocument更容易用于导航Xml文件。

要有效地使用它,您需要学习XPath。例如,要获取第一个row的名称:

string name = xdoc.SelectSingleNode("/eveapi/result/rowset/row").Attribute["name"].InnerText;

甚至更多XPath:

string name = xdoc.SelectSingleNode("/eveapi/result/rowset/row/@name").InnerText;

你甚至可以过滤:

XmlNodeList elems = xdoc.SelectNodes("//*[@name=\"characters\"]") 

为您提供rowset元素。

但这不是主题。