以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 XML源码及示例(仅原创和转载) 』  (http://bbs.xml.org.cn/list.asp?boardid=32)
----  [转帖]c# xml操作类  (http://bbs.xml.org.cn/dispbbs.asp?boardid=32&rootid=&id=32838)


--  作者:pumaboyd
--  发布时间:5/22/2006 1:45:00 PM

--  [转帖]c# xml操作类
public class XmlControl
{
  protected string strXmlFile;
  protected XmlDocument objXmlDoc = new XmlDocument();

  public XmlControl(string XmlFile)
  {
   //
   // TODO: 在這裡加入建構函式的程式碼
   //
   try
   {
    objXmlDoc.Load(XmlFile);
   }
   catch (System.Exception ex)
   {
    throw ex;
   }
   strXmlFile = XmlFile;
  }

  public DataView GetData(string XmlPathNode)
  {
   //查找數據。返回一個DataView
   DataSet ds = new DataSet();
   StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
   ds.ReadXml(read);
   return ds.Tables[0].DefaultView;
  }

  public void Replace(string XmlPathNode,string Content)
  {
   //更新節點內容。
   objXmlDoc.SelectSingleNode(XmlPathNode).InnerText = Content;
  }

  public void Delete(string Node)
  {
   //刪除一個節點。
   string mainNode = Node.Substring(0,Node.LastIndexOf("/"));
   objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
  }

  public void InsertNode(string MainNode,string ChildNode,string Element,string Content)
  {
   //插入一節點和此節點的一子節點。
   XmlNode objRootNode = objXmlDoc.SelectSingleNode(MainNode);
   XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);
   objRootNode.AppendChild(objChildNode);
   XmlElement objElement = objXmlDoc.CreateElement(Element);
   objElement.InnerText = Content;
   objChildNode.AppendChild(objElement);
  }

  public void InsertElement(string MainNode,string Element,string Attrib,string AttribContent,string Content)
  {
   //插入一個節點,帶一屬性。
   XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
   XmlElement objElement = objXmlDoc.CreateElement(Element);
   objElement.SetAttribute(Attrib,AttribContent);
   objElement.InnerText = Content;
   objNode.AppendChild(objElement);
  }

  public void InsertElement(string MainNode,string Element,string Content)
  {
   //插入一個節點,不帶屬性。
   XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
   XmlElement objElement = objXmlDoc.CreateElement(Element);
   objElement.InnerText = Content;
   objNode.AppendChild(objElement);
  }

  public void Save()
  {
   //保存文檔。
   try
   {
    objXmlDoc.Save(strXmlFile);
   }
   catch (System.Exception ex)
   {
    throw ex;
   }
   objXmlDoc = null;
  }
}

=========================================================

实例应用:

   string strXmlFile = Server.MapPath("TestXml.xml");
   XmlControl xmlTool = new XmlControl(strXmlFile);

//   數據顯視
//   dgList.DataSource = xmlTool.GetData("Book/Authors[ISBN=\"0002\"]");
//   dgList.DataBind();

//   更新元素內容
//   xmlTool.Replace("Book/Authors[ISBN=\"0002\"]/Content","ppppppp");
//   xmlTool.Save();

//   添加一個新節點
//   xmlTool.InsertNode("Book","Author","ISBN","0004");
//   xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Content","aaaaaaaaa");
//   xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Title","Sex","man","iiiiiiii");
//   xmlTool.Save();

//   刪除一個指定節點的所有內容和屬性
//   xmlTool.Delete("Book/Author[ISBN=\"0004\"]");
//   xmlTool.Save();

//   刪除一個指定節點的子節點
//   xmlTool.Delete("Book/Authors[ISBN=\"0003\"]");
//   xmlTool.Save();


--  作者:sd3377312
--  发布时间:5/28/2006 4:53:00 PM

--  
好东西,谢了,兄弟.
--  作者:sunyqq
--  发布时间:6/5/2006 5:24:00 PM

--  
精彩,真精彩!
--  作者:lex_shi
--  发布时间:6/14/2006 11:08:00 AM

--  
不错!
--  作者:nws_yjj
--  发布时间:7/11/2006 10:15:00 AM

--  
很好的咚咚阿
--  作者:kinghunter
--  发布时间:7/11/2006 11:05:00 AM

--  
不错
--  作者:wind2006
--  发布时间:7/13/2006 6:08:00 PM

--  
为什么总是说好,那msdn上没有吗??
--  作者:microking
--  发布时间:7/23/2006 8:38:00 PM

--  
精彩,真精彩!
--  作者:hhfh
--  发布时间:7/26/2006 10:38:00 AM

--  
CD.xml
<?xml version="1.0" encoding="UTF-8" ?>
<CATALOG>
 <CD>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Columbia</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
 </CD>
 <CD>
  <TITLE>Hide your heart</TITLE>
  <ARTIST>Bonnie Tyler</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>CBS Records</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
 </CD>
<CATALOG>

我调用
private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   string strXmlFile = Server.MapPath("cd.xml");
   XmlControl xmlTool = new XmlControl(strXmlFile);

   //   數據顯視
      dgList.DataSource = xmlTool.GetData("CD/TITLE[COUNTRY=\"UK\"]");
      dgList.DataBind();
}

运行有错误
行 33: //查找數據。返回一個DataView
行 34: DataSet ds = new DataSet();
行 35: StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
行 36:  ds.ReadXml(read);

未将对象引用设置到对象的实例。行 35: StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);

这是怎么回事呢


--  作者:lljsj
--  发布时间:7/26/2006 10:57:00 AM

--  
int main(void)
{
        xmlDocPtr doc = NULL;
        xmlNodePtr cur = NULL;

        doc = xmlParseFile("lx.xml");
        cur = xmlDocGetRootElement(doc);
        printf("%s\n", Convert("utf-8", "gb2312", (char *)xmlNodeGetContent(cur)));
}
兄弟,上面是读取整个XML文件,我想读取单个XML里的其中一个标签怎么取读取,帮帮忙把代码写出来好吗谢了


--  作者:asusronaldo
--  发布时间:12/21/2006 10:35:00 AM

--  
楼主 用XMLWriter怎么写这种格式的XML?帮忙看看啊,急死俺了~~
<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  </PropertyGroup>
我这么写
  writer.WriteStartElement("Configuration");   //"Condition"," '$(Configuration)' == '' ",
          writer.WriteElementString("Configuration", "Debug");
            writer.WriteAttributeString("Condition", " '$(Configuration)' == '' ");
报错啊~~
谢谢!!!
--  作者:asusronaldo
--  发布时间:12/21/2006 10:55:00 AM

--  
自己搞定了  用writestring就好了 ,郁闷~~
--  作者:kingna
--  发布时间:1/8/2007 5:26:00 PM

--  
好文﹐作個記號收藏起來
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
156.006ms