【问题标题】:modifying xml on the fly即时修改xml
【发布时间】:2012-03-20 06:28:30
【问题描述】:

以下代码sn -p 返回xml文档

public XmlDocument GetXMLFile(int ID)
        {

            List<UserInfoBE> data = GetById(ID);
            DataSet ds = ConvertGenericsListToDataSet(data);
            XmlDocument XmlDoc = new XmlDocument();
            XmlDocument doc = GenerateXMLDeclaration(XmlDoc);//Create xml Declaration
            doc = AddTableTag(doc);//Create parent node USERDATA

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                doc = AddUserinfoTag(doc, dr[8].ToString(), Convert.ToInt32(dr[31].ToString()), Convert.ToString(dr[32].ToString()), dr[3].ToString());
            }

            doc = SetHeirarchyLevel(doc);
            string _errorFile = AppDomain.CurrentDomain.BaseDirectory + "XML\\";
            System.IO.Directory.CreateDirectory(_errorFile);
            _errorFile += "FIle" + DateTime.Now.ToString("dd-MM-yyyy") + ".xml"; 
            XmlNodeList nodes = doc.SelectNodes("USERDATA/Userinfo");
            XmlDocument newXMLDoc = new XmlDocument();
            XmlDocument newDoc = GenerateXMLDeclaration(newXMLDoc);
            newDoc.AppendChild(nodes);            
            doc.Save(_errorFile);
            return doc;
        }

XML 文件格式:

<?xml version="1.0"?>
<USERDATA>
  <Userinfo>
    <Userinfo>
      <Userinfo>
        <Userinfo>
          <Userinfo>
            <Userinfo/>
            <Userinfo>
              <Userinfo/>
            </Userinfo>
          </Userinfo>
          <Userinfo>
            <Userinfo/>
            <Userinfo/>
          </Userinfo>
        </Userinfo>
      </Userinfo>
    </Userinfo>
  </Userinfo>
</EDVDATA>

问题如何获取以下格式的文件

<Userinfo>
        <Userinfo>
          <Userinfo>
            <Userinfo>
              <Userinfo>
                <Userinfo/>
                <Userinfo>
                  <Userinfo/>
                </Userinfo>
              </Userinfo>
              <Userinfo>
                <Userinfo/>
                <Userinfo/>
              </Userinfo>
            </Userinfo>
          </Userinfo>
        </Userinfo>
      </Userinfo>

我尝试将返回的文档对象(Xml 文件)保存在一个文件夹中。 然后创建了一个新的 xmldocument 对象并尝试在新的 xmlobject 中附加 Xmlnodelist 哪个 userinfo 结构(就在上面)

newDoc.AppendChild(节点);行抛出错误

无法从“System.Xml.XmlNodeList”转换为“System.Xml.XmlNode”

非常感谢任何帮助。

【问题讨论】:

    标签: asp.net xml nodes


    【解决方案1】:

    您正在尝试追加多个节点,但该函数一次只追加一个节点。试试这个:

    foreach(XmlNode node in nodes)
    {
        newDoc.AppendChild(node);
    }
    

    【讨论】:

    • 谢谢,你说得对,Appenchild 方法期望单节点。
    【解决方案2】:

    这样解决了,

    公共 XmlDocument GetXMLFile(int ID) {

            List<UserInfoBE> data = GetById(ID);
            DataSet ds = ConvertGenericsListToDataSet(data);
            XmlDocument XmlDoc = new XmlDocument();
            XmlDocument doc = GenerateXMLDeclaration(XmlDoc);//Create xml Declaration
            doc = AddTableTag(doc);//Create parent node USERDATA
    
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                doc = AddUserinfoTag(doc, dr[8].ToString(), Convert.ToInt32(dr[31].ToString()), Convert.ToString(dr[32].ToString()), dr[3].ToString());
            }
    
            doc = SetHeirarchyLevel(doc);
            XmlNodeList nodes = doc.SelectNodes("USERDATA/Userinfo");
            XmlDocument newXMLDoc = new XmlDocument();
            XmlDocument newDoc = GenerateXMLDeclaration(newXMLDoc);
            foreach (XmlNode node in nodes)
            {
                newDoc.AppendChild(newDoc.ImportNode(node,true));
            }
            return newDoc;
        }
    

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 1970-01-01
      • 2018-02-08
      • 2018-06-09
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多