我正在通过网络阅读文件:
<?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;组;以后提取数据?
答案 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)
使用XmlReader类或XmlTextReader类
http://msdn.microsoft.com/en-us/library/aa720470(v=vs.71).aspx
http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader(v=vs.71).aspx
答案 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
元素。
但这不是主题。