org.w3c.dom.Element - Neues Element hinzufügen

  • Antworten:2
  • Bentwortet
Anna Bauer
  • Forum-Beiträge: 5

27.11.2018, 07:32:22 via Website

Hallo meine Lieben,

ich habe leider keine Lösung für mein Problem gefunden und mache deshalb ein neues Thema auf.

  • Ich versuche einen bestehenden Code aus C# in Java / Android umzusetzen.
  • Es geht darum eine XML einzulesen und ein neues Element hinzuzufügen.
  • In 'AddElement' wird dem übergebenen XElement (System.Xml.Linq.XElement) ein neus Element hinzugefügt.
  • Nachdem die 'AddElement' Methode verlassen wurde, ist das neue Element in 'xml' vorhanden und kann mit 'GetElement' ermittelt werden.
  • In Java / Android ist es anscheinend notwendig 'Document' zu verwenden um neue 'Element' Objekte zu erstellen.
  • In Java / Android habe ich nun das Problem, dass nach verlassen der 'AddElement' Methode das neue Element in 'xml' NICHT vorhanden ist

Testdaten Bsp.:

<root>
  <Ebene1>
    <Ebene2>
    <Ebene2>
  </Ebene1>
</root>

C# Code:

XElement xml = this.LoadXml("testdaten.xml");
this.AddElement(xml, "root/Ebene1/Ebene2", "NewElem", "Value");
XElement newElem = this.GetElement(xml, "root/Ebene1/Ebene2/NewElem")


private void AddElement(XElement xml, string relTagPath, string newElemName, string newElemValue = "")
{
  // Ermittelt, ob der angegebene Elementpfad dem obersten XML-Element entspricht
  XElement parentElem;
  if (relTagPath.Equals(xml.Name.ToString()))
  {
      parentElem = xml;
  }
  else
  {
      parentElement = this.GetElement(xml, relTagPath);
  }

  XElement newElem = new XElement(newElemName);
  if (!string.IsNullOrWhiteSpace(newElemValue))
  {
      newElem.SetValue(newElemValue);
  }

  parentElem.Add(newElem);
}

Java / Android Code:

Element xml = this.LoadXml("testdaten.xml");
this.AddElement(xml, "root/Ebene1/Ebene2", "NewElem", "Value");
Element newElem = this.GetElement(xml, "root/Ebene1/Ebene2/NewElem")


private void AddElement(Element xml, string relTagPath, string newElemName, string newElemValue = "")
{
  // Ermittelt, ob der angegebene Elementpfad dem obersten XML-Element entspricht
  Element parentElem;
  if (relTagPath.Equals(xml.Name.ToString()))
  {
      parentElem = xml;
  }
  else
  {
      parentElement = this.GetElement(xml, relTagPath);
  }

  Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
  doc.adoptNode(parentElem);

  Element newElem = doc.createElement(newElemName);
  if (!newElemValue.equals("")
  {
      newElem.SetTextContent(newElemValue);
  }

  parentElem.appendChild(doc.importNode(newElem, true);
}

Ich hoffe sehr, dass ihr mir helfen könnt!

Liebe Grüße
Anna

Kommentieren
Beste Antwort
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.11.2018, 09:22:38 via Website

Hallo Anna,

du musst das Document am anfang erstellen und ann in deine Methode übergeben,
da sich in Java alles darauf bezieht.

Hier mal ein Beispiel: https://xjaphx.wordpress.com/2011/10/27/android-xml-adventure-create-write-xml-data/

Somit brauchst du das Doc auf oberster Ebene, danach kannst du auch Hierarchisch durch die XML Elemente gehen und appendChild etc. benutzen.

— geändert am 27.11.2018, 09:23:55

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
LudyAnna Bauer
Kommentieren
Anna Bauer
  • Forum-Beiträge: 5

27.11.2018, 14:48:08 via Website

Hallo Pascal,

das war die Lösung für mein Problem!

Vielen Dank für deine Hilfe :$

Der Link ist super!

Liebe Grüße
Anna

Hilfreich?
Pascal P.
Kommentieren