none
[C#] [Xml] RRS feed

  • 问题

  • C# 中,如何实现以下功能?
    如果我有个主程序:
                XmlDocument Xml_Doc = new XmlDocument();
                string Price_XML_FileName=todayStr + " Price.xml";
                Xml_Doc.CreateComment(Price_XML_FileName);
                XmlNode root_Xml_Doc = Xml_Doc.CreateNode(XmlNodeType.Element, "Price", null);

    XmlElement per = Xml_Doc.CreateElement("per");
                    per.SetAttribute("Code", member);

                    XmlElement per_today = Xml_Doc.CreateElement("date");
                    per_today.InnerText  = todayStr;
                    per.AppendChild(per_today);

                    XmlElement per_dayOfWeek = Xml_Doc.CreateElement("dayOfWeek");
                    per_dayOfWeek.InnerText  = today.DayOfWeek.ToString();
                    per.AppendChild(per_dayOfWeek);

                    XmlElement per_Price = Xml_Doc.CreateElement("Price");
                    per_YesterdayPrice.InnerText = YesterdayPrice;
                    per.AppendChild(per_Price);

     但我在保存这个xml文件之前,我还有另一个子过程,产生余下的存取,并且,需要归在这一段里面(假设我有60个这样的行,没一段的列相同),之前的产生3个列,另一个方法需要产生余下的7个列。

    问,我如何做传递?我试过用方法回传一个xmlNode,但编译程序报错:上下文不存在这样的节点(之类的报错,我没有马上截下来,只是先避开这个问题)。

    现在我的解决方法是分两次,第一产生这只有3列60行的文件,第二次通过查找和插入的方法补充到10列60行。但我还是在想,而是以上的问题。
    (个人有些癖好:虽然现在的cpu很强,但是不想浪费分开两次所需要的循环开销;但又没想出巧妙的办法)

    先谢谢了!

    2009年11月5日 15:05

答案

  • 首先 对于你的这段代码有问题
     XmlNode root_Xml_Doc = Xml_Doc.CreateNode(XmlNodeType.Element, "Price", null);
    这里应该改成 XmlNode root_Xml_Doc = Xml_Doc.AppendChild(Xml_Doc.CreateNode(XmlNodeType.Element, "Price", null));
    否则你的Xml_Doc永远为空,因为没有根节点
    同时还有其它很多地方也存在问题 你参考下我下面这段代码 可能你对XmlDocument还不是很熟悉
     XmlDocument Xml_Doc = new XmlDocument();
             string Price_XML_FileName = todayStr + " Price.xml";
             Xml_Doc.CreateComment(Price_XML_FileName);
             XmlElement root_Xml_Doc = Xml_Doc.AppendChild(Xml_Doc.CreateNode(XmlNodeType.Element, "Price", null)) as XmlElement;

             XmlNode per = root_Xml_Doc.AppendChild(Xml_Doc.CreateElement("per"));

             per.Attributes.Append(Xml_Doc.CreateAttribute("Code")).Value = member;


             XmlElement per_today = Xml_Doc.CreateElement("date");
             per_today.InnerText = todayStr;
             per.AppendChild(per_today);

             XmlElement per_dayOfWeek = Xml_Doc.CreateElement("dayOfWeek");
             per_dayOfWeek.InnerText = today.DayOfWeek.ToString();
             per.AppendChild(per_dayOfWeek);

             XmlElement per_Price = Xml_Doc.CreateElement("Price");
             per_Price.InnerText = YesterdayPrice;
             per.AppendChild(per_Price);


    其次,对于你提到的之前只有3列也就是per下边只有三个子元素,你可以通过XmlWriter来对Xml进行写入操作这样速度比较的快
    在写之前判断下以前的三个元素是否已经存在


    建议楼主再仔细查看下XmlDocument类,相信会有很多收获的

    有几点:
    XmlDocument只能有个根节点
    所有节点和属性都必须通过XmlDocument.CreateElement CreateAttribute等方法来添加到根节点或者根节点下其它节点


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    • 已标记为答案 OpenNovo 2009年11月6日 13:56
    2009年11月6日 1:33
    版主