Answers:
XmlDocument从字符串或文件中读取XML。
XmlDocument doc = new XmlDocument();
doc.Load("c:\\temp.xml");
要么
doc.LoadXml("<xml>something</xml>");
然后在它下面找到一个节点,就是这样
XmlNode node = doc.DocumentElement.SelectSingleNode("/book/title");
要么
foreach(XmlNode node in doc.DocumentElement.ChildNodes){
string text = node.InnerText; //or loop through its children as well
}
然后像这样阅读该节点内的文本
string text = node.InnerText;
或读取属性
string attr = node.Attributes["theattributename"]?.InnerText
始终检查Attributes [“ something”]上是否为null,因为如果该属性不存在,它将为null。
XmlNode node = XmlDocument.Docu...
行真的XmlNode = doc.Docu...
?为什么更改答案并将其doc.
删除?
// Loading from a file, you can also load from a stream
var xml = XDocument.Load(@"C:\contacts.xml");
// Query the data and write out a subset of contacts
var query = from c in xml.Root.Descendants("contact")
where (int)c.Attribute("id") < 4
select c.Element("firstName").Value + " " +
c.Element("lastName").Value;
foreach (string name in query)
{
Console.WriteLine("Contact's Full Name: {0}", name);
}
参考:MSDN上的LINQ to XML
这是我编写的用于读取xml网站地图的应用程序:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data;
using System.Xml;
namespace SiteMapReader
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please Enter the Location of the file");
// get the location we want to get the sitemaps from
string dirLoc = Console.ReadLine();
// get all the sitemaps
string[] sitemaps = Directory.GetFiles(dirLoc);
StreamWriter sw = new StreamWriter(Application.StartupPath + @"\locs.txt", true);
// loop through each file
foreach (string sitemap in sitemaps)
{
try
{
// new xdoc instance
XmlDocument xDoc = new XmlDocument();
//load up the xml from the location
xDoc.Load(sitemap);
// cycle through each child noed
foreach (XmlNode node in xDoc.DocumentElement.ChildNodes)
{
// first node is the url ... have to go to nexted loc node
foreach (XmlNode locNode in node)
{
// thereare a couple child nodes here so only take data from node named loc
if (locNode.Name == "loc")
{
// get the content of the loc node
string loc = locNode.InnerText;
// write it to the console so you can see its working
Console.WriteLine(loc + Environment.NewLine);
// write it to the file
sw.Write(loc + Environment.NewLine);
}
}
}
}
catch { }
}
Console.WriteLine("All Done :-)");
Console.ReadLine();
}
static void readSitemap()
{
}
}
}
您可以使用DataSet读取XML字符串。
var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();
dsSet.ReadXml(stringReader);
为了提供信息而发布此信息。
public void ReadXmlFile()
{
string path = HttpContext.Current.Server.MapPath("~/App_Data"); // Finds the location of App_Data on server.
XmlTextReader reader = new XmlTextReader(System.IO.Path.Combine(path, "XMLFile7.xml")); //Combines the location of App_Data and the file name
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
break;
case XmlNodeType.Text:
columnNames.Add(reader.Value);
break;
case XmlNodeType.EndElement:
break;
}
}
}
您可以避免使用第一条语句,而只需在XmlTextReader的构造函数中指定路径名。
有多种方法,具体取决于您要去的地方。XmlDocument比XDocument轻,但是如果您希望以最小的方式验证字符串包含XML,则正则表达式可能是您可以做出的最快和最轻的选择。例如,我已经为我的API实现了带有SpecFlow的冒烟测试,并且希望测试任何有效XML中的结果之一-然后我将使用正则表达式。但是,如果我需要从该XML中提取值,则可以使用XDocument对其进行解析,以更快,更少的代码完成它。或者,如果必须使用大型XML(有时我使用的是大约100万行的XML,甚至更多),我会使用XmlDocument。我什至可以逐行阅读。为什么?尝试在Visual Studio中以私有字节打开800MB以上的内存;即使在生产中,您也不能拥有大于2GB的对象。您可以使用twerk,但您不可以。如果您必须分析包含很多行的文档,则该文档可能是CSV。
我写了此评论,因为我看到了XDocument的大量示例。XDocument不适用于大型文档,或者仅用于验证内容是否为XML有效时。如果您希望检查XML本身是否有意义,则需要Schema。
我也否决了建议的答案,因为我认为它本身需要上面的信息。想象一下,我需要验证200M的XML(每小时10次)是否是有效的XML。XDocument将浪费大量资源。
prasanna venkatesh还指出,您可以尝试将字符串填充到数据集,它也将指示有效的XML。