изменение xml на лету - PullRequest
       8

изменение xml на лету

2 голосов
/ 20 марта 2012

Следующий фрагмент кода возвращает 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 и попытался добавить Xmlnodelist, структура userinfo (чуть выше) в новый xmlobject

newDoc.AppendChild (узлы); строка выдает ошибку

не может преобразовать из 'System.Xml.XmlNodeList' в 'System.Xml.XmlNode'

любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Вы пытаетесь добавить несколько узлов, но функция принимает один узел для добавления одновременно.Попробуйте это:

foreach(XmlNode node in nodes)
{
    newDoc.AppendChild(node);
}
0 голосов
/ 20 марта 2012

решил это так,

публичный 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...