C#处理带命名空间的XML
2008-11-28 11:23
387 查看
写入带命名空间的xml文本。
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version=/"1.0/" encoding=/"utf-8/"?><root></root>");
//namespace为空时,不能设置prefix
XmlElement ele = doc.CreateElement("bbs","hit","urn:bbs");
ele.InnerText = "100";
doc.DocumentElement.AppendChild(ele);
doc.Save("test1.xml");
空namespace的元素不能设置前缀。
保存后test1.xml内容:
<?xml version="1.0" encoding="utf-8"?>
<root>
<bbs:hit xmlns:bbs="urn:bbs">100 </bbs:hit>
</root>
读取带命名空间的xml文本。
XmlDocument doc = new XmlDocument();
//报错:“bbs”是未声明的命名空间
//doc.LoadXml("<?xml version=/"1.0/" encoding=/"utf-8/"?><root><bbs:hit>99</bbs:hit></root>");
doc.LoadXml("<?xml version=/"1.0/" encoding=/"utf-8/"?><root><bbs:hit xmlns:bbs=/"urn:bbs/">100</bbs:hit></root>");
XmlNode root = doc.DocumentElement;
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
xnm.AddNamespace("bbs", "urn:bbs");
XmlNode node = root.SelectSingleNode("bbs:hit", xnm);
if(node != null)
System.Console.WriteLine("found node :" + node.InnerText);
另一个读取的例子。
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version=/"1.0/" encoding=/"utf-8/"?><root xmlns=/"http://www.163.com/rss/0.9/"><news><title>这是标题</title></news></root>");
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
xnm.AddNamespace("bbs", "http://www.163.com/rss/0.9");
XmlNode root = doc.SelectSingleNode("bbs:root", xnm);
XmlNode news = root.SelectSingleNode("bbs:news",xnm);
//错误,取不到节点
//news = root.SelectSingleNode("news", xnm);
XmlNode title = doc.SelectSingleNode("bbs:root/bbs:news/bbs:title", xnm);
System.Console.WriteLine("root.InnerXml = " + root.InnerXml);
System.Console.WriteLine("news.InnerXml = " + news.InnerXml);
System.Console.WriteLine("title.InnerText = " + title.InnerText);
System.Console.ReadLine();
输出:
root.InnerXml = <news xmlns="http://www.163.com/rss/0.9"><title>这是标题</title>
</news>
news.InnerXml = <title xmlns="http://www.163.com/rss/0.9">这是标题</title>
title.InnerText = 这是标题
可见子节点也继承了父节点的命名空间。即使通过父节点root.SelectSingleNode()查找子节点,也必须提供命名空间。
接着上一个读取的例子,在root节点下添加子节点:
//必须传递第二个参数,否则创建的节点是<news xmlns="">
XmlElement news1 = doc.CreateElement("news", "http://www.163.com/rss/0.9");
XmlElement title1 = doc.CreateElement("title", "http://www.163.com/rss/0.9");
title1.InnerText = "新加的一个标题";
news1.AppendChild(title1);
root.AppendChild(news1);
doc.Save("test3.xml");
保存后的test3.xml内容:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.163.com/rss/0.9">
<news>
<title>这是标题</title>
</news>
<news>
<title>新加的一个标题</title>
</news>
</root>
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version=/"1.0/" encoding=/"utf-8/"?><root></root>");
//namespace为空时,不能设置prefix
XmlElement ele = doc.CreateElement("bbs","hit","urn:bbs");
ele.InnerText = "100";
doc.DocumentElement.AppendChild(ele);
doc.Save("test1.xml");
空namespace的元素不能设置前缀。
保存后test1.xml内容:
<?xml version="1.0" encoding="utf-8"?>
<root>
<bbs:hit xmlns:bbs="urn:bbs">100 </bbs:hit>
</root>
读取带命名空间的xml文本。
XmlDocument doc = new XmlDocument();
//报错:“bbs”是未声明的命名空间
//doc.LoadXml("<?xml version=/"1.0/" encoding=/"utf-8/"?><root><bbs:hit>99</bbs:hit></root>");
doc.LoadXml("<?xml version=/"1.0/" encoding=/"utf-8/"?><root><bbs:hit xmlns:bbs=/"urn:bbs/">100</bbs:hit></root>");
XmlNode root = doc.DocumentElement;
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
xnm.AddNamespace("bbs", "urn:bbs");
XmlNode node = root.SelectSingleNode("bbs:hit", xnm);
if(node != null)
System.Console.WriteLine("found node :" + node.InnerText);
另一个读取的例子。
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version=/"1.0/" encoding=/"utf-8/"?><root xmlns=/"http://www.163.com/rss/0.9/"><news><title>这是标题</title></news></root>");
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
xnm.AddNamespace("bbs", "http://www.163.com/rss/0.9");
XmlNode root = doc.SelectSingleNode("bbs:root", xnm);
XmlNode news = root.SelectSingleNode("bbs:news",xnm);
//错误,取不到节点
//news = root.SelectSingleNode("news", xnm);
XmlNode title = doc.SelectSingleNode("bbs:root/bbs:news/bbs:title", xnm);
System.Console.WriteLine("root.InnerXml = " + root.InnerXml);
System.Console.WriteLine("news.InnerXml = " + news.InnerXml);
System.Console.WriteLine("title.InnerText = " + title.InnerText);
System.Console.ReadLine();
输出:
root.InnerXml = <news xmlns="http://www.163.com/rss/0.9"><title>这是标题</title>
</news>
news.InnerXml = <title xmlns="http://www.163.com/rss/0.9">这是标题</title>
title.InnerText = 这是标题
可见子节点也继承了父节点的命名空间。即使通过父节点root.SelectSingleNode()查找子节点,也必须提供命名空间。
接着上一个读取的例子,在root节点下添加子节点:
//必须传递第二个参数,否则创建的节点是<news xmlns="">
XmlElement news1 = doc.CreateElement("news", "http://www.163.com/rss/0.9");
XmlElement title1 = doc.CreateElement("title", "http://www.163.com/rss/0.9");
title1.InnerText = "新加的一个标题";
news1.AppendChild(title1);
root.AppendChild(news1);
doc.Save("test3.xml");
保存后的test3.xml内容:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.163.com/rss/0.9">
<news>
<title>这是标题</title>
</news>
<news>
<title>新加的一个标题</title>
</news>
</root>
相关文章推荐
- C#处理带有命名空间的xml方法
- XML——c#读取带命名空间的xml
- 在jquery中处理带有命名空间的XML数据
- 在jquery中处理带有命名空间的XML数据
- c#代码查询带命名空间的xml文件
- C# 中的默认命名空间的范围 (LINQ to XML)
- C# 读取带xmlns 命名空间的XML
- C#解析XML详解(XPath以及带命名空间NameSpace)
- DOM4J处理XML带有命名空间的四种方法
- C#中,有两个不同的CS文件,但这两个文件具有相同的命名空间(namespace)。一个CS文件要用另一个CS文件中的类的话,下面有一个处理方式。
- c# 读取带有命名空间的XML
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
- C#解析XML详解(XPath以及带命名空间NameSpace)
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
- xml内容解析,包含命名空间时需特殊处理(dom4j)
- c#读取带命名空间的xml
- QML处理xml---查询含命名空间的节点
- dom4j中通过xpath处理带命名空间的XML文件
- C# 加载XML 文件 去掉注释 和命名空间
- 学习笔记之C#parm、命名空间、字符串处理