Text eines Elements in XML Datei mit JAVA bearbeiten und kompletten Element-Zweig hinzufügen

Meri

Mitglied
Hallo Zusammen,
ich weiß zu diesem Thema sind schon mehrere Themen offen, aber zu meinem aktuellen Fall finde ich keins, welches mir weiterhilft, deshalb muss ich doch ein eigenes auf machen.

Und zwar handelt es sich um eine XML-Datei (genauer gesagt sogar kml, was aber wie xml behandelt werden kann), in welcher ich bei einem bestimmten Zweig den Text vom Attribut ändern will.
Siehe folgendes Beispiel:

HTML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><kml xmlns="http://earth.google.com/kml/2.2">
<Document>
  <name>Mapperz;</name>
  <description><![CDATA[Testing out the new My Maps Service from Google Maps]]></description>
<Style id="style5">
    <LineStyle>
      <color>40000000</color>
      <width>3</width>
    </LineStyle>
    <PolyStyle>
      <color>73FF0000</color>
      <fill>1</fill>
      <outline>1</outline>
    </PolyStyle>
  </Style>
<Placemark>
    <name>Shape 1</name>
    <description/>
    <styleUrl>#style5</styleUrl>
    <Polygon>
      <outerBoundaryIs>
        <LinearRing>
          <tessellate>1</tessellate>
         <coordinates>
        -118.7850000,34.0623400,0.000000
        -118.7843501,34.0423400,0.000000
        </coordinates>
        </LinearRing>
      </outerBoundaryIs>
    </Polygon>
  </Placemark> 
<Placemark>
    <name>Shape 2</name>
    <description/>
    <styleUrl>#style5</styleUrl>
    <Polygon>
      <outerBoundaryIs>
        <LinearRing>
          <tessellate>1</tessellate>
        <coordinates>
        -118.7850000,34.0623400,0.000000
        -118.7843501,34.0423400,0.000000
        -118.7920000,34.0522227,0.000000
        </coordinates>
        </LinearRing>
      </outerBoundaryIs>
    </Polygon>
  </Placemark>
</Document>
</kml>

Ich möchte hier bei dem ersten 'Placemark' den name von "Shape 1" zu "Karte1" ändern.

Versucht habe ich es mit folgendem Code:
Java:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filepath);
           
           
Node placemark = doc.getElementsByTagName("Placemark").item(0);
           
//update point from placemarks
NamedNodeMap nameAttr = placemark.getAttributes();
Node nameVal = nameAttr.getNamedItem("name");
nameVal.setTextContent("Karte1");
           
//write the content into kml file
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer trans = transFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
trans.transform(source, result);

Aber er bringt mir dann immer eine "java.lang.NullPointerException" Fehlermeldung auf die Zeile 'nameVal.setTextContent("Karte1");' bezogen.

Ich wäre sehr dankbar über jeden Tip an was es liegen könnte.

------
Und meine Zweite Frage wäre noch, ob ihr eine Idee habt wie ich einen weiteren kompletten Element-Zweig einfügen kann, wie in diesemfall z.b. einen 'Placemark', da ich noch weitere Koordinatenfelder brauche zum darstellen, aber ich komm nicht drauf wie das machbar ist und finde auch garkeinen ansatz, da ja die kompletten Attribute und Werte bis auf die Koordinaten und der Name schon drinnen sein soll beim einfügen. Oder kopier ich da einfach einen vorhandenen Zweig und änder ihn, aber dan wäre ich wieder beim problem des änderns.


Bitte lasst mich nicht im Stich und hilft mir!
 

Flown

Administrator
Mitarbeiter
Normalerweise löst man sowas mit XSLT... Aber wenn du schon mit DOM arbeitest:
Java:
String kml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><kml xmlns=\"http://earth.google.com/kml/2.2\">\r\n" + 
    "<Document>\r\n" + 
    "  <name>Mapperz;</name>\r\n" + 
    "  <description><![CDATA[Testing out the new My Maps Service from Google Maps]]></description>\r\n" + 
    "<Style id=\"style5\">\r\n" + 
    "    <LineStyle>\r\n" + 
    "      <color>40000000</color>\r\n" + 
    "      <width>3</width>\r\n" + 
    "    </LineStyle>\r\n" + 
    "    <PolyStyle>\r\n" + 
    "      <color>73FF0000</color>\r\n" + 
    "      <fill>1</fill>\r\n" + 
    "      <outline>1</outline>\r\n" + 
    "    </PolyStyle>\r\n" + 
    "  </Style>\r\n" + 
    "<Placemark>\r\n" + 
    "    <name>Shape 1</name>\r\n" + 
    "    <description/>\r\n" + 
    "    <styleUrl>#style5</styleUrl>\r\n" + 
    "    <Polygon>\r\n" + 
    "      <outerBoundaryIs>\r\n" + 
    "        <LinearRing>\r\n" + 
    "          <tessellate>1</tessellate>\r\n" + 
    "         <coordinates>\r\n" + 
    "        -118.7850000,34.0623400,0.000000\r\n" + 
    "        -118.7843501,34.0423400,0.000000\r\n" + 
    "        </coordinates>\r\n" + 
    "        </LinearRing>\r\n" + 
    "      </outerBoundaryIs>\r\n" + 
    "    </Polygon>\r\n" + 
    "  </Placemark>\r\n" + 
    "<Placemark>\r\n" + 
    "    <name>Shape 2</name>\r\n" + 
    "    <description/>\r\n" + 
    "    <styleUrl>#style5</styleUrl>\r\n" + 
    "    <Polygon>\r\n" + 
    "      <outerBoundaryIs>\r\n" + 
    "        <LinearRing>\r\n" + 
    "          <tessellate>1</tessellate>\r\n" + 
    "        <coordinates>\r\n" + 
    "        -118.7850000,34.0623400,0.000000\r\n" + 
    "        -118.7843501,34.0423400,0.000000\r\n" + 
    "        -118.7920000,34.0522227,0.000000\r\n" + 
    "        </coordinates>\r\n" + 
    "        </LinearRing>\r\n" + 
    "      </outerBoundaryIs>\r\n" + 
    "    </Polygon>\r\n" + 
    "  </Placemark>\r\n" + 
    "</Document>\r\n" + 
    "</kml>";

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new InputSource(new StringReader(kml)));

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
NodeList evaluate = (NodeList) xPath.evaluate("//Placemark/name/text()", doc, XPathConstants.NODESET);
for (int i = 0; i < evaluate.getLength(); i++) {
  Node nameNode = evaluate.item(i);
  nameNode.setNodeValue("Karte" + nameNode.getNodeValue().replaceAll("\\D*", ""));
}
NodeList evaluate2 = (NodeList) xPath.evaluate("//Placemark", doc, XPathConstants.NODESET);
for(int i = 0; i < evaluate2.getLength(); i++) {
  Node node = evaluate2.item(i);
  Element commentElement = doc.createElement("Comment");
  commentElement.setAttribute("hidden", "true");
  commentElement.appendChild(doc.createTextNode("my comment"));
  node.appendChild(commentElement);
}

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

transformer.transform(new DOMSource(doc), new StreamResult(new OutputStreamWriter(System.out, "UTF-8")));
 

Meri

Mitglied
Danke für die schnelle Antwort.

Ich hätte da noch Rückfragen dazu:
und zwar warum baust du die komplette Datei neu auf? Hab ich indemfall vergessen zu sagen, dass es diese Datei bereits gibt und in dieser eben etwas geändert und eingefügt werden soll. -> aber ok ich hab es jetzt mal ausprobiert und es klappt genauso auch mit der datei, wie ich es davor auch gemacht hab.

Und zum anderen bzgl. des einfügen eines neuen Zweiges, damit hatte ich gemeint einen kompletten neuen Zweig 'Placemark' mit allen Attributten und unterpunkten, nicht nur ein Attribut dieses Zweiges. Wie würde ich das denn machen?

Und bzgl. des änderns, ist es auch möglich nur bei einem Zweig das zu ändern, also z.b. beim ersten Placemark den Text vom Namen komplett zu ändern und aber beim zweiten nicht?

Und wenn es mit xlst einfacher wäre, wie würde ich das angehen oder bräuchte ich dann wieder eigne libs dafür oder so? Aber ansonsten ok, es klappt ja so jetzt schon so gut wie.
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Bei näheren Fragen HIER ein Tutorial von Mykong.
und zwar warum baust du die komplette Datei neu auf? Hab ich indemfall vergessen zu sagen, dass es diese Datei bereits gibt und in dieser eben etwas geändert und eingefügt werden soll.
Du musst die Datei überschreiben, anders funktioniert das nicht.
Und zum anderen wo genau in dem Code wird jetzt die änderung des Textes vorgenommen und wo das hinzufügen eines neuen Elements.
HIER:
Java:
NodeList evaluate = (NodeList) xPath.evaluate("//Placemark/name/text()", doc, XPathConstants.NODESET);
for (int i = 0; i < evaluate.getLength(); i++) {
  Node nameNode = evaluate.item(i);
  nameNode.setNodeValue("Karte" + nameNode.getNodeValue().replaceAll("\\D*", ""));
}
NodeList evaluate2 = (NodeList) xPath.evaluate("//Placemark", doc, XPathConstants.NODESET);
for(int i = 0; i < evaluate2.getLength(); i++) {
  Node node = evaluate2.item(i);
  Element commentElement = doc.createElement("Comment");
  commentElement.setAttribute("hidden", "true");
  commentElement.appendChild(doc.createTextNode("my comment"));
  node.appendChild(commentElement);
}

Und wenn es mit xlst einfacher wäre, wie würde ich das angehen oder bräuchte ich dann wieder eigne libs dafür oder so?
Mal ein wenig im Internet nach Tutorials suchen?! Zum Beispiel die von Oracle: XSLT.
Du brauchst keine externe Lib, ist alles mitgeliefert.

Ich hab nicht gesagt, dass es in XSLT einfacher wäre, nur das es eigentlich damit gemacht wird. Du kannst alles in DOM genau so erledigen (was ich dir auch raten würde, wenn du keine Ahnung von DOM/XPath hast).
 

Meri

Mitglied
Du musst die Datei überschreiben, anders funktioniert das nicht.
Also es funktioniert bei mir aber sogar, ohne das überschreiben - hab es davor auch schon so gemacht.


Ich hab nicht gesagt, dass es in XSLT einfacher wäre, nur das es eigentlich damit gemacht wird. Du kannst alles in DOM genau so erledigen (was ich dir auch raten würde, wenn du keine Ahnung von DOM/XPath hast).
Ok ja dan werde ich jetzt bei dem bleiben, da ich es schon fast hab.

Zum ändern noch eine frage, kann ich auch nur in einem Zweig was ändern, indem ich z.b. sag es soll in dem zweig XY was ändern, welcher den name 'shape1' hat und diesen zu 'eins'?
 

Flown

Administrator
Mitarbeiter
Also es funktioniert bei mir aber sogar, ohne das überschreiben - hab es davor auch schon so gemacht.
Aha und was glaubst du was:
Java:
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
trans.transform(source, result);
macht?
 

Flown

Administrator
Mitarbeiter
Zum ändern noch eine frage, kann ich auch nur in einem Zweig was ändern, indem ich z.b. sag es soll in dem zweig XY was ändern, welcher den name 'shape1' hat und diesen zu 'eins'?
Ein ganzes Beispiel nochmal (richtiges raussuchen mit XPath ist hier sehr hilfreich):
Java:
String kml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><kml xmlns=\"http://earth.google.com/kml/2.2\">\r\n" +
    "<Document>\r\n" +
    "  <name>Mapperz;</name>\r\n" +
    "  <description><![CDATA[Testing out the new My Maps Service from Google Maps]]></description>\r\n" +
    "<Style id=\"style5\">\r\n" +
    "    <LineStyle>\r\n" +
    "      <color>40000000</color>\r\n" +
    "      <width>3</width>\r\n" +
    "    </LineStyle>\r\n" +
    "    <PolyStyle>\r\n" +
    "      <color>73FF0000</color>\r\n" +
    "      <fill>1</fill>\r\n" +
    "      <outline>1</outline>\r\n" +
    "    </PolyStyle>\r\n" +
    "  </Style>\r\n" +
    "<Placemark>\r\n" +
    "    <name>Shape 1</name>\r\n" +
    "    <description/>\r\n" +
    "    <styleUrl>#style5</styleUrl>\r\n" +
    "    <Polygon>\r\n" +
    "      <outerBoundaryIs>\r\n" +
    "        <LinearRing>\r\n" +
    "          <tessellate>1</tessellate>\r\n" +
    "         <coordinates>\r\n" +
    "        -118.7850000,34.0623400,0.000000\r\n" +
    "        -118.7843501,34.0423400,0.000000\r\n" +
    "        </coordinates>\r\n" +
    "        </LinearRing>\r\n" +
    "      </outerBoundaryIs>\r\n" +
    "    </Polygon>\r\n" +
    "  </Placemark>\r\n" +
    "<Placemark>\r\n" +
    "    <name>Shape 2</name>\r\n" +
    "    <description/>\r\n" +
    "    <styleUrl>#style5</styleUrl>\r\n" +
    "    <Polygon>\r\n" +
    "      <outerBoundaryIs>\r\n" +
    "        <LinearRing>\r\n" +
    "          <tessellate>1</tessellate>\r\n" +
    "        <coordinates>\r\n" +
    "        -118.7850000,34.0623400,0.000000\r\n" +
    "        -118.7843501,34.0423400,0.000000\r\n" +
    "        -118.7920000,34.0522227,0.000000\r\n" +
    "        </coordinates>\r\n" +
    "        </LinearRing>\r\n" +
    "      </outerBoundaryIs>\r\n" +
    "    </Polygon>\r\n" +
    "  </Placemark>\r\n" +
    "</Document>\r\n" +
    "</kml>";

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new InputSource(new StringReader(kml)));

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
Node evaluate = (Node) xPath.evaluate("//Placemark[name=\"Shape 1\"]/name/text()", doc, XPathConstants.NODE);
evaluate.setNodeValue("eins");

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

transformer.transform(new DOMSource(doc), new StreamResult(new OutputStreamWriter(System.out, "UTF-8")));
 

Meri

Mitglied
Also erst mal Danke und ja das für das Ändern klappt jetzt damit.

Beim einfügen eines weiteren Zweiges müsste es doch nach dem selben Prinzip auch gehen oder?
Ich hab es mal folgend versucht:
Java:
Node evaluate2 = (Node) xPath.evaluate("//Placemark[name=\"Shape2\"]/name/text()", doc, XPathConstants.NODE);
Element commentElement = doc.createElement("Commentare");
commentElement.setAttribute("hidden", "true");
commentElement.appendChild(doc.createTextNode("my comment"));
evaluate2.appendChild(commentElement);

Aber es bringt mir immer folgenden Fehler:

Exception in thread "main" org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: Es wurde versucht, einen Knoten an einer Stelle einzufügen, an der dies nicht zulässig ist.
 

Flown

Administrator
Mitarbeiter
Ich würde dir mal raten dich in XPath einzulesen, denn dann wüsstest du das du den "TextKnoten" mit .../name/text() selektiert hättest. Wenn du das /text() weglässt, dann bist du in dem "PlacemarkNode" mit dem Wert Name="Shape 2" und kannst an dieser Stelle dann einfügen.
 

Meri

Mitglied
ja aber ich wolte ja das komentar nicht in dem Feld name einfügen sondern, dazu als weiterer Punkt.
Genauso wie ich grad versuche bei dem zweiten 'Placemark' (also Shape2) ein weiteres Element unterhalb von 'LinearRing' einzufügen oder zu ändern, das es also z.b. folgend aussieht:
Code:
<Placemark>
    <name>Shabe2</name>
    <description/>
    <styleUrl>#style5</styleUrl>
    <Polygon>
      <outerBoundaryIs>
        <LinearRing>
          <tessellate>1</tessellate>
          <neuesElement>neuerText</neuesElement>
          <coordinates>-123,123,0.000000
             -456,456,0.000000
         </coordinates>
       </LinearRing>
      </outerBoundaryIs>
    </Polygon>
</Placemark>

Das Element 'neuesElement' ist neu und die coordinates sind geändert.

Das ändern der ersten coordinates, also vom ersten Placemark bekomme ich ja hin mit folgendem:
Code:
Node evaluate = (Node) xPath.evaluate("//Placemark/Polygon/outerBoundaryIs/LinearRing/coordinates/text()", doc, XPathConstants.NODE);
        evaluate.setNodeValue("-123,123,0.000000   -456,456,0.000000");
aber eben das für das zweite nicht, wo ich den namen angeben müsste von dem Placemark.
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Du schaffst mich heute noch ... Machen wir mal was anders. Jetzt bauen wir uns händisch ein xml zusammen und somit decken wir jetzt alle Eventualitäten ab. Sozusagen ein Nachschlagewerk für dich:
Java:
import java.io.OutputStreamWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Test {
  public static void main(String... args) throws Exception {
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document doc = docBuilder.newDocument();
    System.out.println("EMPTY DOCUMENT");
    print(doc);
    
    Element root = doc.createElement("root");
    doc.appendChild(root);
    System.out.println("ADDED ROOT");
    print(doc);
    
    for (int i = 0; i < 3; i++) {
      Element node = doc.createElement("element");
      node.setAttribute("id", Integer.toString(i));
      root.appendChild(node);
    }
    System.out.println("ADDED ELEMENTS AND ATTRIBUTES");
    print(doc);
    
    XPathFactory xPathFactory = XPathFactory.newInstance();
    XPath xPath = xPathFactory.newXPath();
    
    NodeList elements = (NodeList) xPath.evaluate("//element[@id=2 or @id=0]", doc, XPathConstants.NODESET);
    for (int i = 0; i < elements.getLength(); i++) {
      Node element = elements.item(i);
      Element comment = doc.createElement("comment");
      comment.appendChild(doc.createTextNode("here's my comment nr. " + Integer.toString(i)));
      element.appendChild(comment);
    }
    
    System.out.println("ADDED ELEMENT IN <element id=2> and <element id=0>");
    print(doc);
    
    System.out.println("EXTRACT THE COMMENTS");
    NodeList comments = (NodeList) xPath.evaluate("//comment/text()", doc, XPathConstants.NODESET);
    for (int i = 0; i < comments.getLength(); i++) {
      Node comment = comments.item(i);
      System.out.println(comment.getNodeValue());
    }
    
    Node elementWithId1 = (Node) xPath.evaluate("//element[@id=1]", doc, XPathConstants.NODE);
    elementWithId1.getParentNode().removeChild(elementWithId1);
    System.out.println("REMOVE AN ELEMENT: <element id=1>");
    print(doc);
  }
  
  private static void print(Document doc) throws Exception {
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
    transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
    
    transformer.transform(new DOMSource(doc), new StreamResult(new OutputStreamWriter(System.out, "UTF-8")));
  }
}
Das kannst du jetzt ausführen und durchgehen. Bei weiteren Fragen, Tutorials ansehen/lesen. Bei wirklich konreten Fragen kannst du dich gerne hier wieder melden.
 

Meri

Mitglied
Ja soweit habe ich das schon verstanden, viele Dank für die Mühe und die ausführliche Antwort, damit hast du mir schon viel weiter geholfen
Mein Problem ist aber folgendes, dass ich in meinem Fall die Koordinaten einfügen will in einen bestimmten Placemark Zweig. Die coordinates sind dem Element 'Polygon/outerBoundaryIs/LinearRing' untergeordnet, haben aber kein Attribut an welchem man diesen Zweig festmachen kann, der Placemark-Zweig ist nur über den 'name' bestimmt, somit muss also anhand des namens gefiltert werden, aber in einem neben unterzweig sollen die Coordinaten rein. Und wie filter ich nach dem namen, aber füge es in 'Polygon' ein?

Meine alternativ lösung wäre gewesen einfach komplett neue Placemarks einzufügen und den Inhalt mit den unterelementen komplett in das createTextNode("hier") zu packen, aber dort kann ich wieder die spitzen Klammern nicht mitgeben, mindestens hab ich mal nicht gefunden wie.
 

Flown

Administrator
Mitarbeiter
Kannst du mal kleine Testdaten mit vorher und nachher liefern? Ich versteh nicht was das Problem hier ist.
 

Meri

Mitglied
also so sieht das script vorher aus
Code:
<Placemark>
    <name>Shabe2</name>
    <description/>
    <styleUrl>#style5</styleUrl>
    <Polygon>
      <outerBoundaryIs>
        <LinearRing>
          <tessellate>1</tessellate>
          <coordinates>-11111,0.000000
             -111111.000000
         </coordinates>
       </LinearRing>
      </outerBoundaryIs>
    </Polygon>
</Placemark>
und so nach dem einfügen
Code:
<Placemark>
    <name>Shabe2</name>
    <description/>
    <styleUrl>#style5</styleUrl>
    <Polygon>
      <outerBoundaryIs>
        <LinearRing>
          <tessellate>1</tessellate>
          <neuesElement>neuerText</neuesElement>
          <coordinates>99999,0.000000
             -99999000000
         </coordinates>
       </LinearRing>
      </outerBoundaryIs>
    </Polygon>
</Placemark>
und davor und danach sind noch mehr placemark.
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Der Code hierfür steht zig-mal in den obrigen Beiträgen:
Java:
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
Node evaluate = (Node) xPath.evaluate("//Placemark[name=\"Shabe2\"]//LinearRing", doc, XPathConstants.NODE);
Element element = doc.createElement("neuesElement");
element.appendChild(doc.createTextNode("neuerText"));
evaluate.appendChild(element);
Sieh dir bitte XPath an!!!!!!11111einseinself

Dann sieht das auch so aus:
XML:
<Placemark>
    <name>Shabe2</name>
    <description/>
    <styleUrl>#style5</styleUrl>
    <Polygon>
      <outerBoundaryIs>
        <LinearRing>
          <tessellate>1</tessellate>
          <coordinates>99999,0.000000
             -99999000000
         </coordinates>
         <neuesElement>neuerText</neuesElement>
        </LinearRing>
      </outerBoundaryIs>
    </Polygon>
</Placemark>
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Anfängerfrage: Von wo kommt #text? XML & JSON 2
E XML Datei mit DOM auslesen (Text mit Attributen) XML & JSON 2
M POI HWPF - copy doc and replace text XML & JSON 2
P XSL: Text zusammenfügen XML & JSON 2
S XML-Kommunikation mit Text und Binärdaten XML & JSON 5
G Element mit Text und Unterelement XML & JSON 2
I JDom Text ändern XML & JSON 4
A Text to XML XML & JSON 25
P HTML Seite Parsen, und bestimmten Text extrahieren XML & JSON 3
M XML Elemente mit JDOM durch Text ersetzen XML & JSON 2
D Text, String vor einem Root Element einfügen XML & JSON 2
M bilder als text verschicken XML & JSON 6
T "Parent" Node eines Attributes XML & JSON 2
M Kann Anbieter eines (REST) Webservice seine Konsumenten automatisch benachrichtigen? XML & JSON 9
R Zugriff auf Inhalt eines Elements XML & JSON 2
D DTD genaue Anzahl eines Elements XML & JSON 0
W Kindelemente mit JDOM eines bestimmten Attributes auslesen XML & JSON 6
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
K Einlesen eines Parameters aus HTML-Datei XML & JSON 4
G xpath: Inhalt eines Kindelements auslesen XML & JSON 2
T Möchte JSP Code in Attribut eines HTML Tags hinein generieren XML & JSON 3
T xsl schleife alle kindeelemtente eines elternelementes durchlaufen XML & JSON 2
K XML als Inhalt eines DropDown XML & JSON 6
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
S XMLStreamReader, letzten eintrag eines xml lesen? XML & JSON 5
F Marshaling eines JAXB Objektes worin ein anderes JAXB Objekt eingeschlossen ist XML & JSON 6
C Kompletten Inhalt eines Tags ausgeben XML & JSON 2
G Welche Klassen zum erzeugen/auslesen eines XML Files verwend XML & JSON 9
Wildcard Namespace Präfixe eines Elements XML & JSON 8
G XML Export und Import eines Files. gibts Tutorials o.ä? XML & JSON 2
G Rekonstruktion eines XML Dokumentes XML & JSON 3
M TextContent eines XML-Elements enthält HTML-Tags . was nun XML & JSON 2
J DOM: Attribut und Inhalt eines Elements nachträglich ändern? XML & JSON 3
H Elemente eines Node auslesen XML & JSON 2
P Problem beim erstellen eines neuen Elements (JDOM) XML & JSON 5
K Größe eines JDOM-Dokuments XML & JSON 6
S Problem beim Erstellen eines pdfs XML & JSON 3
M dom nodes vs. elements? XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben