回答:
文字列またはファイルからXMLを読み取るXmlDocument。
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
属性が存在しない場合はnullになるため、Attributes ["something"]の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()
{
}
}
}
貼り付けビンのコード http://pastebin.com/yK7cSNeY
また、VB.NETはC#よりもコンパイラによるXML解析サポートがはるかに優れています。オプションと欲求があれば、チェックしてください。
DataSetを使用してXML文字列を読み取ることができます。
var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();
dsSet.ReadXml(stringReader);
情報のためにこれを投稿します。
たとえば、XmlTextReaderクラスを確認してください。
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を処理する必要がある場合はXmlDocumentを使用します(時には、100万行以上のXMLを処理することもあります)。その後、1行ずつ読むこともできました。どうして?Visual Studioでプライベートバイトで800MB以上を開いてみてください。本番環境であっても、2GBを超えるオブジェクトは使用できません。あなたはtwerkでできますが、そうすべきではありません。多くの行を含むドキュメントを解析する必要がある場合、このドキュメントはおそらくCSVです。
XDocumentの例がたくさんあるので、このコメントを書きました。XDocumentは、大きなドキュメントに適していない場合、またはコンテンツがXMLとして有効かどうかを確認するだけの場合には適していません。XML自体に意味があるかどうかを確認する場合は、スキーマが必要です。
提案された回答にも反対票を投じました。なぜなら、それ自体に上記の情報が必要だからです。200MのXML(1時間に10回)が有効なXMLかどうかを確認する必要があるとします。XDocumentは大量のリソースを浪費します。
prasanna venkateshは、データセットに文字列を入力してみることもできると述べています。これは有効なXMLも示します。