+ Antworten
Ergebnis 1 bis 7 von 7

Thema: XPath Text Nodes

  1. #1
    User Bit Themenstarter

    Registriert seit
    26.03.2014
    Fachbeiträge
    3
    Genannt
    0 Post(s)
    Hallo zusammen,

    ich bin dabei eine Anwendung zu programmieren, die ein mir unbekanntes xml einlesen können soll. Die einzige Einschränkung ist, dass die Struktur in etwa so aussieht:

    XML Code:
    1. <root>
    2.     <level1>
    3.         <a>text</a>
    4.         <b>text</b>
    5.         <c>text</c>
    6.     </level1>
    7.     <level1>
    8.         <a>text</a>
    9.         <b>text</b>
    10.         <c>text</c>
    11.     </level1>
    12.     <level1>
    13.         <a>text</a>
    14.         <b>text</b>
    15.         <c>text</c>
    16.     </level1>
    17.     <level1>
    18.         <a>text</a>
    19.         <b>text</b>
    20.         <c>text</c>
    21.     </level1>
    22. </root>

    Das soll bedeuten, einen Text als Inhalt haben nur a, b und c. Diese Nodes müssen sich auch immer auf der untersten Ebene befinden.
    Wenn ich nun Xpath benutze, wie kann ich dann nur a, b und c selektieren? (jedes Mal)

    Java Code:
    1.             DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    2.             Document doc = dBuilder.parse(xmlFile);
    3.             doc.getDocumentElement().normalize();
    4.                  
    5.             XPath xPath = XPathFactory.newInstance().newXPath();
    6.             String expr = "//*[text()]";
    7.  
    8.             NodeList nl = (NodeList) xPath.evaluate(expr, doc, XPathConstants.NODESET);
    9.            
    10.             for (int i = 0; i < nl.getLength(); i++){
    11.                 System.out.println(nl.item(i).getNodeName() + " ");
    12.             }

    Mir geht es um die Methode text(). Kann ich die so verändern, dass nur die nodes der 3. Ebene erfasst werden?

    Danke und viele Grüße
    tulpenbaum

  2. #2
    Projekt-Moderator - Simple Reader Halbes Megabyte Avatar von schlingel
    Registriert seit
    31.07.2013
    Fachbeiträge
    604
    Genannt
    59 Post(s)
    Zitat Zitat von tulpenbaum Beitrag anzeigen
    Kann ich die so verändern, dass nur die nodes der 3. Ebene erfasst werden?
    Kurze Antwort: Ja.

    Ich glaube /*/*/*[text()] sollte das schon erledigen. Dann solltest du den von jedem Element in der dritten Ebene bekommen. Wenn du das nur für a, b und c möchtest sollte dass den Job erledigen:

    Code:
    /*/*/a[text()] | /*/*/b[text()] | /*/*/c[text()]
    Alles ohne Garantie: Das ist einfach so aus dem Ärmel geschüttelt.
    Es gibt nichts Gutes, außer man tut es!

  3. #3
    User Bit Themenstarter

    Registriert seit
    26.03.2014
    Fachbeiträge
    3
    Genannt
    0 Post(s)
    Hallo Schlingel,

    danke für die Antwort. Diese Lösung kenne ich, jedoch ist mein Problem, dass ich das xml-Dok nicht kenne, also können es auch nur 2 oder 4 Ebenen sein, ich weiß nur, dass es auf der untersten den für mich interessanten Teil gibt.

    Viele Grüße

  4. #4
    Projekt-Moderator - Simple Reader Halbes Megabyte Avatar von schlingel
    Registriert seit
    31.07.2013
    Fachbeiträge
    604
    Genannt
    59 Post(s)
    Zitat Zitat von tulpenbaum Beitrag anzeigen
    ich weiß nur, dass es auf der untersten den für mich interessanten Teil gibt.
    Kennst du die Namen der interessanten Knoten? Das wäre dann //*/a[text()].

    Wenn du nur die untersten Knoten willst, habe ich hier auf SO eine Lösung gefunden:
    Code:
    //node()[not(node())]
    Es gibt nichts Gutes, außer man tut es!

  5. #5
    User Bit Themenstarter

    Registriert seit
    26.03.2014
    Fachbeiträge
    3
    Genannt
    0 Post(s)
    Danke, das hilft mir sehr!

  6. #6
    User Megabyte Avatar von Timothy_Truckle
    Registriert seit
    01.08.2013
    Ort
    Wasserkuppe
    Fachbeiträge
    1.330
    Genannt
    86 Post(s)
    Blog-Einträge
    5
    Noch mehr würde es helfen, dem Liferanten des XML eine XSD vorzugeben, an die er sich halten muss...

    bye
    TT

  7. #7
    Projekt-Moderator - Simple Reader Halbes Megabyte Avatar von schlingel
    Registriert seit
    31.07.2013
    Fachbeiträge
    604
    Genannt
    59 Post(s)
    Zitat Zitat von Timothy_Truckle Beitrag anzeigen
    Noch mehr würde es helfen, dem Liferanten des XML eine XSD vorzugeben, an die er sich halten muss...
    Die Antwort ist so richtig wie sie nutzlos ist.
    Es gibt nichts Gutes, außer man tut es!

+ Antworten Thema als "offen" markieren

Direkt antworten Direkt antworten

Wie nennt man Wasser im gasförmigen Aggregatzustand?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. (Best Practice) Text parsen
    Von Bizarrus im Forum Allgemeine Themen
    Antworten: 6
    Letzter Beitrag: 10.11.2014, 15:46
  2. Nodes poll
    Von Kristina92 im Forum Java-Grundlagen
    Antworten: 2
    Letzter Beitrag: 15.11.2013, 17:05
  3. the text is cut off
    Von oshmianski im Forum DockingFrames
    Antworten: 4
    Letzter Beitrag: 16.07.2012, 08:36
  4. Text formatieren
    Von DjTomBola im Forum AWT, Swing, JavaFX & SWT
    Antworten: 3
    Letzter Beitrag: 11.07.2008, 21:10
  5. text in textfeldern formatieren
    Von christoph im Forum HTML / CSS / JavaScript / AJAX
    Antworten: 2
    Letzter Beitrag: 14.11.2006, 19:18

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •