it-swarm.dev

Připojit řetězec XML řetězec existující XmlDocument

Mám XmlDocument, který již existuje a je čten ze souboru. 

Chtěl bych přidat kus Xml do uzlu v dokumentu. Existuje dobrý způsob, jak vytvořit a přidat všechny uzly bez přeplnění můj kód s mnoha .CreateNote a .AppendChild volání?

Chtěl bych nějaký způsob, jak vytvořit řetězec nebo řetězecBuilder platné části Xml a jen připojit, že do XmlNode.

ex: Původní XmlDoc:

<MyXml>
   <Employee>
   </Employee>
</MyXml>

a rád bych přidal značku Demographic (s několika dětmi) pro zaměstnance:

<MyXml>
   <Employee>
      <Demographic>
         <Age/>
         <DOB/>
      </Demographic>
   </Employee>
</MyXml>
29
Howler

Navrhuji použít XmlDocument.CreateDocumentFragment pokud máte data ve volném tvaru řetězce. Stále budete muset použít AppendChild pro přidání fragmentu do uzlu, ale máte svobodu vytvářet XML ve vašem StringBuilderu.

XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(@"<MyXml><Employee></Employee></MyXml>");

XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment();
xfrag.InnerXml = @"<Demographic><Age/><DOB/></Demographic>";

xdoc.DocumentElement.FirstChild.AppendChild(xfrag);
80
user7116

Zkuste to:

employeeNode.InnerXml = "<Demographic><Age/><DOB/></Demographic>";

Alternativně (pokud máte jiný dokument XML, který chcete použít):

employeeNode.AppendChild(employeeNode.OwnerDocument.ImportNode(otherXmlDocument.DocumentElement, true));
11
Panos

Alternativně je to způsob, jakým byste to mohli udělat ve více způsobech LINQy 3.5:

 XDocument doc = XDocument.Load(@"c:\temp\test.xml");
 XElement demoNode = new XElement("Demographic");
 demoNode.Add(new XElement("Age"));
 demoNode.Add(new XElement("DOB"));
 doc.Descendants("Employee").Single().Add(demoNode);
 doc.Save(@"c:\temp\test2.xml");
6
Echostorm

Zvažte použití XmlWriter pro vytváření vašich fragmentů na StringBuilder, protože to bude poskytovat ověření a nahrazení znaků pro vás.

2
Jeff Yates

Vše, co dělám, je vytvoření nového objektu datové sady a otevření souboru XML pomocí souboru ReadXML myDataset.ReadXML(path and file name)

Pak přidejte nebo odeberte řádky, které potřebuji, a dokument znovu uložte pomocí myDataset.WriteXML(path and file name).

Sbohem.

0
Ivan

Nic z toho pro mě nefungovalo, takže jsem hrál kolem abitu a tady je moje řešení.

Nejdříve načtěte textové pole (můžete ho umístit do viditelného = false ve veřejné verzi) Načíst data do textového pole, jako je tomu tak.

string Path = Directory.GetCurrentDirectory() + "/2016";
            string pathFile = Path + "/klanten.xml";
            StreamReader sr = new StreamReader(pathFile);
            txt.Text = sr.ReadToEnd();
            sr.Close();

na tlačítko uložit načíst do textového pole en uložit Nezapomeňte u bude muset aktualizovat textové pole po tom, pokud u chcete přidat více adres/jmen, jsem nezahrnula tuto část.

string name = Globals.s_Name;
        string klanten = txt.Text;
        string s = klanten;
        XmlDocument xdoc = new XmlDocument();

        string klant = "<voornaam>" + naamBox1.Text + "</voornaam>";
        xdoc.LoadXml(s);
        XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment();
        xfrag.InnerXml = klant;
        xdoc.DocumentElement.FirstChild.AppendChild(xfrag);
        xdoc.Save(name + "/klanten.xml");
0
Peter Gruppelaar