Linq to XML
//创建XML文档
XmlDocument xdc = new XmlDocument();
//创建根元素
XmlElement sprites = xdc.CreateElement("Sprites");
//第一个精灵
XmlElement sprite1 = xdc.CreateElement("Sprite01");
//职业
XmlElement profession1 = xdc.CreateElement("Profession");
profession1.InnerText = "法师";
//武器
XmlElement weapon1 = xdc.CreateElement("Weapon");
weapon1.InnerText = "魔杖";
//添加上述节点
sprites.AppendChild(sprite1);
sprite1.AppendChild(profession1);
sprite1.AppendChild(weapon1);
//同理
//第二个精灵
XmlElement sprite2 = xdc.CreateElement("Sprite02");
//职业
XmlElement profession2 = xdc.CreateElement("Profession");
profession2.InnerText = "战士";
//武器
XmlElement weapon2 = xdc.CreateElement("Weapon");
weapon2.InnerText = "屠龙刀";
//添加上述节点
sprites.AppendChild(sprite2);
sprite2.AppendChild(profession2);
sprite2.AppendChild(weapon2);
//第三个精灵
XmlElement sprite3 = xdc.CreateElement("Sprite03");
//职业
XmlElement profession3 = xdc.CreateElement("Profession");
profession3.InnerText = "道士";
//武器
XmlElement weapon3 = xdc.CreateElement("Weapon");
weapon3.InnerText = "倚天剑";
//添加上述节点
sprites.AppendChild(sprite3);
sprite3.AppendChild(profession3);
sprite3.AppendChild(weapon3);
//根节点添加到xml文档
xdc.AppendChild(sprites);
xdc.Save(@"d:\\Sprites.xml");
//--------------------------------------
XAttribute xa;
XElement Sprite01 = new XElement("Sprite01",
new XAttribute("Profession", "法师"),
xa = new XAttribute("Weapon", "魔杖")
);
Console.WriteLine("XML数据修改前:\n{0}", Sprite01.ToString());
Console.WriteLine("属性{0}的父节点:\n{1}", xa.ToString(), xa.Parent.ToString());
Console.WriteLine("XML数据修改后:");
//删除属性
xa.Remove();
//修改指定属性值
Sprite01.Attribute("Profession").Value = "魔法师";
Console.WriteLine(Sprite01);
XElement sprites2 = new XElement(
"Sprites",
new XComment("注释:下面是所有精灵的介绍"),//创建注释
new XElement("Sprite01",
new XElement("Profession", "法师"),
new XElement("Weapon", "魔杖")),
new XElement("Sprite02",
new XElement("Profession", "战士"),
new XElement("Weapon", "屠龙刀")),
new XElement("Sprite03",
new XElement("Profession", "道师"),
new XElement("Weapon", "倚天剑")));
Console.WriteLine(sprites2);
//---------------------------
//创建XML文档
XDocument xml = new XDocument();
//创建XML声明
XDeclaration declaration = new XDeclaration("1.0", "GB2312", "no");//xml版本1.0,汉字编码,需要外部文档来解析
//创建XML文档类型
XDocumentType documenttype = new XDocumentType("Sprites", null, "Sprites.dtd", null);//外部解析文档Sprites.dtd
//创建XML处理指令
XProcessingInstruction instruction = new XProcessingInstruction("xml-stylesheet", "href=\"Sprites.css\" type=\"text/css\"");//引用Sprites.css文档来定义xml文档的表现形式
//创建XML CData值
XCData data1 = new XCData("<H1>法师<H1>");
XCData data2 = new XCData("<H1>道士<H1>");
//创建XML元素
XElement Sprites = new XElement("Sprites",
new XElement("Sprite",
new XElement("Profession", data1),
new XElement("Weapon", "魔杖")),
new XComment("用xml属性的方式创建xml元素"),//创建xml注释
new XElement("Sprite",
new XAttribute("Profession", "战士"),//创建xml属性
new XAttribute("Weapon", "屠龙刀")),//创建xml属性
new XElement("Sprite",
new XElement("Profession", data2),
new XElement("Weapon", "倚天剑")));
//指定xml文档声明
xml.Declaration = declaration;
//添加xml文档类型
xml.Add(documenttype);
//添加xml处理指令
xml.Add(instruction);
//添加xml元素
xml.Add(Sprites);
//保存xml文档
xml.Save(@"d:\\Sprites.xml");
//---------------------------------------------
XElement Sprites2 = new XElement("Sprites",
new XElement("Sprite",
new XElement("Profession", "法师"),
new XElement("Weapon", "魔杖")),
new XElement("Sprite",
new XAttribute("Profession", "战士"),
new XAttribute("Weapon", "屠龙刀")),
new XElement("Sprite",
new XElement("Profession","道士"),
new XElement("Weapon", "倚天剑")));
//保存到指定文件
Sprites.Save(@"d:\\Sprites.xml");
//保存到TextWriter
StringWriter sw = new StringWriter();
Sprites2.Save(sw,SaveOptions.DisableFormatting);
Console.WriteLine(sw);
//保存到XmlWriter
XmlWriter xw = XmlWriter.Create(@"d:\\Sprites1.xml");
Sprites2.Save(xw);
//写入文件
xw.Flush();
//-------------------------------------------------
XElement loadSprites = XElement.Load(@"d:\\Sprites.xml",LoadOptions.SetBaseUri|LoadOptions.SetLineInfo);
//添加新元素
loadSprites.Elements("Sprite").Last().AddAfterSelf(
new XElement("Sprite",
new XAttribute("Profession","猎人"),
new XAttribute("Weapon", "弓箭")));
//输出xml信息
Console.WriteLine(loadSprites);
Console.WriteLine("---------------------------------");
//获取文件基URL信息
string baseUri = loadSprites.BaseUri;
Console.WriteLine("xml基URL信息:{0}",baseUri);
Console.WriteLine("---------------------------------");
//输出xml中每一个元素的行信息
foreach (var s in loadSprites.DescendantsAndSelf())
{
Console.WriteLine("元素名称:{0} 行信息:{1}",s.Name,
((IXmlLineInfo)s).HasLineInfo()?((IXmlLineInfo)s).LineNumber.ToString():"无行号");
}
//--------------------------------------------------
//xml字符串
string str_xml = @"<Sprites>
<Sprite>
<Profession>法师</Profession>
<Weapon>魔杖</Weapon>
</Sprite>
<Sprite>
<Profession>战士</Profession>
<Weapon>屠龙刀</Weapon>
</Sprite>
<Sprite>
<Profession>道士</Profession>
<Weapon>倚天剑</Weapon>
</Sprite>
</Sprites>";
XElement SpritesFromString = XElement.Parse(str_xml);
Console.WriteLine(SpritesFromString);
//--------------------------------------------------
//建立xml文档
XDocument document = new XDocument();
//建立节点
XNode node;
XElement SpritesForeach = new XElement("Sprites",
new XElement("Sprite",
new XElement("Profession", "法师"),
new XElement("Weapon", "魔杖")),
new XElement("Sprite",
node=new XElement("Profession", "战士"),
new XElement("Weapon", "屠龙刀")),
new XElement("Sprite",
new XElement("Profession", "道士"),
new XElement("Weapon", "倚天剑")));
//添加根元素到文档对象中
document.Add(SpritesForeach);
//当前节点上一个节点
Console.WriteLine("当前节点上一个节点:{0}",node.PreviousNode);
//当前节点
Console.WriteLine("当前节点:{0}",node);
//当前节点的下一个节点
Console.WriteLine("当前节点的下一个节点:{0}",node.NextNode);
//当前节点的文档对象
Console.WriteLine("当前节点的文档对象:{0}",node.Document);
//当前节点的父节点
Console.WriteLine("当前节点的父节点:{0}",node.Parent);
//-------------------------------------------------
//建立节点
XNode node2;
//建立元素
XElement element;
//建立xml数据源
XElement SpritesForeach2 = new XElement("Sprites",
new XElement("Sprite",
new XElement("Profession", "法师"),
new XElement("Weapon", "魔杖")),
new XElement("Sprite",
node2=new XElement("Profession", "战士"),
new XElement("Weapon", "屠龙刀")),
new XElement("Sprite",
new XElement("Profession", "道士"),
element = new XElement("Weapon", "倚天剑")));
//当前节点的下一级元素中第一个名为Sprite的元素
XElement CurrentElement = SpritesForeach2.Element("Sprite");
Console.WriteLine("当前节点的下一级元素中第一个名为Sprite的元素:\n{0}",CurrentElement);
//当前节点所有下级节点
Console.WriteLine("当前节点所有下级节点:");
foreach (var n in CurrentElement.Nodes())
{
Console.WriteLine(n);
}
//当前节点所有的后代节点
Console.WriteLine("当前节点所有的后代节点:");
foreach (var n in CurrentElement.Descendants())
{
Console.WriteLine("元素名:{0}",n.Name);
Console.WriteLine(n);
Console.WriteLine("--------------------------------");
}
//---------------------------------------------
//建立节点
XNode node3;
//建立元素
XElement element3;
//建立xml数据源
XElement SpritesForeach3 = new XElement("Sprites",
new XElement("Sprite",
new XElement("Profession", "法师"),
new XElement("Weapon", "魔杖")),
new XElement("Sprite",
node3=new XElement("Profession", "战士"),
new XElement("Weapon", "屠龙刀")),
new XElement("Sprite",
new XElement("Profession", "道士"),
element3 = new XElement("Weapon", "倚天剑")));
SpritesForeach3.Save(@"C:\Documents and Settings\Administrator\桌面\sp.xml");
//当前节点的所有祖先元素
Console.WriteLine("当前节点的所有祖先元素:");
foreach (var e in node3.Ancestors())
{
Console.WriteLine("元素名:{0}", e.Name);
Console.WriteLine(e);
Console.WriteLine("---------------------------------");
}
//当前节点的所有后续节点
Console.WriteLine("当前节点的所有后续节点:");
foreach (var n in node3.NodesAfterSelf())
{
Console.WriteLine(n);
}
//当前节点的所有前驱节点
Console.WriteLine("当前节点的所有前驱节点:");
foreach (var n in node3.NodesBeforeSelf())
{
Console.WriteLine(n);
}
//---------------------------------------------------------------
//建立节点
XNode node4;
//建立元素
XElement element4;
//建立xml数据源
XElement SpritesForeach4 = new XElement("Sprites",
new XElement("Sprite",
new XElement("Profession", "法师"),
new XElement("Weapon", "魔杖")),
new XElement("Sprite",
node4=new XElement("Profession", "战士"),
new XElement("Weapon", "屠龙刀")),
new XElement("Sprite",
new XElement("Profession", "道士"),
element4 = new XElement("Weapon", "倚天剑")));
//当前元素和其所有的祖先元素
Console.WriteLine("当前元素和其所有的祖先元素:");
foreach (var e in element4.AncestorsAndSelf())
{
Console.WriteLine("元素名:{0}",e.Name);
Console.WriteLine(e);
Console.WriteLine("----------------------------------");
}
//当前元素和其所有的后代元素
Console.WriteLine("当前元素和其所有的后代元素:");
foreach (var e in element4.DescendantsAndSelf())
{
Console.WriteLine("元素名:{0}", e.Name);
Console.WriteLine(e);
Console.WriteLine("----------------------------------");
}
//---------------------------------------------------------
//建立节点
XNode node5;
//建立元素
XElement element5;
//建立xml数据源
XElement Sprites5 = new XElement("Sprites",
new XElement("Sprite01",
new XElement("Profession", "法师"),
new XElement("Weapon", "魔杖")),
new XElement("Sprite",
new XElement("Profession", "战士"),
node5 = new XElement("Weapon", "屠龙刀")),
element5= new XElement("Sprite",
new XAttribute("Profession", "道士"),
new XAttribute("Weapon", "倚天剑")));
//添加为最后一个子节点
Sprites5.Add(new XElement("Sprite",
new XAttribute("Profession", "猎人"),
new XAttribute("Weapon", "弓箭")
));
//添加为第一个子节点
Sprites5.AddFirst(new XElement("Sprite",
new XAttribute("Profession", "骑士"),
new XAttribute("Weapon", "方天画戟")
));
//删除子节点
Sprites5.Element("Sprite01").RemoveNodes();
Console.WriteLine(Sprites5);
//-----------------------------------------------------
Console.WriteLine("\r\n***********************************************");
//建立节点
XNode node6;
//建立元素
XElement element6;
//建立xml数据源
XElement Sprites6 = new XElement("Sprites",
new XElement("Sprite01",
new XElement("Profession", "法师"),
new XElement("Weapon", "魔杖")),
new XElement("Sprite",
new XElement("Profession", "战士"),
node6 = new XElement("Weapon", "屠龙刀")),
element6= new XElement("Sprite",
new XAttribute("Profession", "道士"),
new XAttribute("Weapon", "倚天剑")));
//添加为自身节点的前一个节点
node6.AddBeforeSelf(new XElement("Weapon", "雪饮刀"));
//添加为自身节点的后一个节点
node6.AddAfterSelf(new XElement("Weapon", "狼牙棒"));
//删除自身节点
Sprites6.FirstNode.Remove();
Console.WriteLine(Sprites6);
//-------------------------------------------------------
Console.WriteLine("\r\n ***********************************************************");
//建立节点
XNode node7;
//建立元素
XElement element7;
//建立xml数据源
XElement Sprites7 = new XElement("Sprites",
new XElement("Sprite01",
new XElement("Profession", "法师"),
new XElement("Weapon", "魔杖")),
new XElement("Sprite",
new XElement("Profession", "战士"),
node7 = new XElement("Weapon", "屠龙刀")),
element7= new XElement("Sprite",
new XAttribute("Profession", "道士"),
new XAttribute("Weapon", "倚天剑")));
//Name属性修改
Sprites7.Element("Sprite01").Name="Sprite";
//Value属性修改
element7.Attribute("Weapon").Value="火麟剑";
//或
//element.SetAttributeValue("Weapon", "火麟剑");
//删除元素属性
element7.RemoveAttributes();
//或
//删除自身所有子节点和属性
//element.RemoveAll();
Console.WriteLine(Sprites7);
//---------------------------------------------------------
Console.WriteLine("\r\n ***********************************************************");
//读取xml文件
XElement xml8 = XElement.Load("D:\\Sprites3.xml");
//查询所有元素名为Sprite的元素
var sprites8 = from s in xml.Descendants("Sprite")
select new {
Profession = s.Element("Profession").Value,
Weapon=s.Element("Weapon").Value
};
//输出sprites信息
foreach (var s in sprites8)
{
Console.WriteLine("精灵职业:{0}",s.Profession);
Console.WriteLine("主要武器:{0}",s.Weapon);
Console.WriteLine("----------------------------------------");
}
Console.Read();
浙公网安备 33010602011771号