TextWriterを使用してXMLファイルを生成し、プログラムはSAXメソッドを使用します。
#region 使用SAX方式处理XML
static void XmlTextWriteTest() {
const string filename = "sampledate.xml";
XmlTextWriter writer;
writer = new XmlTextWriter(filename, null);
// 为使文件易读,使用缩进
writer.Formatting = Formatting.Indented;
// 写XML声明
writer.WriteStartDocument();
// 引用样式
string PItext = "type='text/xsl'href='book.xsl'";
writer.WriteProcessingInstruction("xml-stylesheet", PItext);
// 文档类型
writer.WriteDocType("book", null, null, "<!ENTITY h 'hardcover'>");
// 写入注释
writer.WriteComment("sample XML");
// 写一个元素(根元素)
writer.WriteStartElement("book");
// 属性
writer.WriteAttributeString("genre", "novel");
writer.WriteAttributeString("ISBN", "1 - 8630 - 014");
// 书名元素
writer.WriteElementString("title", "The Handmaid's Tale");
// Write the style element
writer.WriteStartElement("style");
writer.WriteEntityRef("h");
writer.WriteEndElement();
// 价格元素
writer.WriteElementString("price", "19.95");
// 写入CDATA
writer.WriteCData("Prices 15% off!!");
// 关闭根元素
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
// 加载文件
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.Load(filename);
// XML文件的内容显示在控制台
Console.WriteLine(doc.InnerXml);
}
#endregion
演算結果:
DOMモードを使用してXMLを処理します。
#region 使用DOM模式来处理XML
static void XmlDocumentTest() {
XmlDocument xd = new XmlDocument();
try {
xd.Load(@".\BookList.xml");
} catch (XmlException e) {
Console.WriteLine("Exception caught:" + e.ToString());
}
XmlNode doc = xd.DocumentElement;
if (doc.HasChildNodes) ProcessChildren(doc, 0);
}
private static void ProcessChildren(XmlNode xn, int level) {
string istr;
istr = Indent(level);
switch (xn.NodeType) {
case XmlNodeType.Comment:
Console.WriteLine(istr + "<!--" + xn.Value + "-->");
break;
case XmlNodeType.ProcessingInstruction:
Console.WriteLine(istr + "<?" + xn.Name + " " + xn.Value + " ?>");
break;
case XmlNodeType.Text:
Console.WriteLine(istr + xn.Value);
break;
case XmlNodeType.Element:
XmlNodeList ch = xn.ChildNodes;
Console.Write(istr + "<" + xn.Name);
XmlAttributeCollection atts = xn.Attributes; // 处理属性
if (atts != null) {
foreach (XmlNode at in atts)
Console.Write(" " + at.Name + "=" + at.Value);
}
Console.WriteLine(">");
foreach (XmlNode nd in ch)
ProcessChildren(nd, level + 2); // 对子节点递归调用
Console.WriteLine(istr + "</" + xn.Name + ">");
break;
default:
break;
}
}
private static string Indent(int level) {
if (level == 0) return "";
return new String(' ', level);
}
#endregion
演算結果:
XSLTを使用してXMLを変換します。
#region 使用XSLT转换XML
static void XslTransformTest() {
try {
XmlDocument doc = new XmlDocument();
doc.Load(@".\BookList.xml");
XPathNavigator nav = doc.CreateNavigator();
nav.MoveToRoot();
XslTransform xt = new XslTransform();
xt.Load(@".\BookList.xslt");
XmlTextWriter writer = new XmlTextWriter(Console.Out);
xt.Transform(nav, null, writer);
} catch (XmlException e) {
Console.WriteLine("XML Exception:" + e.ToString());
} catch (XsltException e) {
Console.WriteLine("XSLT Exception:" + e.ToString());
}
}
#endregion
XMLへのリンク
System.Xml.Linq
名前空間によって提供されるLing to XML
サポート。
1.XMLを作成して記述します
この名前空間のXDocument、XElementおよびXText、XAttributeは、XMLドキュメントを読み書きするための主要なメソッドを提供します。XDocumentコンストラクターを使用してXMLドキュメントオブジェクトを作成し、XElementオブジェクトを使用してXMLノード要素を作成し、XAttributeコンストラクターを使用して要素の属性を作成します。XTextコンストラクターを使用してノード内のテキストを作成します。
Linq to XMLの使用は、XML自体の記述方法とほとんど同じように構築できます。
public static void WriteXml() {
// 构造XML
var xDoc = new XDocument(new XElement("root",
new XElement("dog",
new XText("小狗"),
new XAttribute("color", "black")),
new XElement("cat"),
new XElement("pig", "小猪")));
// 写入文件
StreamWriter sw = new StreamWriter(
new FileStream(@"E:\Visual Studio 2019\C#\Mooc学习\ConsoleApp020XML\bin\Debug\t.xml", FileMode.Create),
Encoding.UTF8);
xDoc.Save(sw);
// 显示控制台
xDoc.Save(Console.Out);
sw.Close();
}
プログラム実行結果のファイル内容は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<root>
<dog color="black">小狗</dog>
<cat />
<pig>小猪</pig>
</root>
uf-8エンコーディングであることに注意してください。コンソールのエンコーディングはデフォルトのg2312です。
<?xml version="1.0" encoding="gb2312"?>
<root>
<dog color="black">小狗</dog>
<cat />
<pig>小猪</pig>
</root>
2.XMLの読み取りとクエリ
Linq
主な目的は、コレクションからのクエリオブジェクトにあるLinq to XML
コレクションはである、、、、、いくつかの方法で得られました。コレクションを取得した後、メソッドを介して要素の属性値を取得でき、ノードのテキスト値を属性を介して取得できます。これは、クエリ、フィルタリング、および並べ替えに簡単に使用できます。XElement
Elements()
Elements(string name)
Descendants
DescendantsAndSelf
Ancestors
AncestorAndSelf
XElement
XElement
Attribute(string name)
XElement
Value
Linq
#region 读取和查询XML
public static void ReadXml() {
// 读入文件
var xDoc = XDocument.Load(@"E:\Visual Studio 2019\C#\Mooc学习\ConsoleApp020XML\bin\Debug\t.xml");
// 进行处理
var query = from item in xDoc.Element("root").Elements()
select new {
TypeName = item.Name,
Saying = item.Value,
Color = item.Attribute("color") == null ? null : item.Attribute("color").Value
};
foreach (var item in query) {
Console.WriteLine("{0}'s color is {1}, {0} said {2}",
item.TypeName,
item.Color ?? "Unknown",
item.Saying ?? "nothing");
}
}
#endregion
実行中のプログラムの表示結果は次のとおりです。
dog's color is black, dog said 小狗
cat's color is Unknown, cat said
pig's color is Unknown, pig said 小猪