2017-04-12 12 views
0

Ich bin neu bei XPath, also entschuldige ich mich im Voraus dafür, wie grundlegend diese Frage ist.XPath, um nur den Text innerhalb eines Elements auszuwählen

Wie extrahiere ich nur den Text eines bestimmten Elements? Zum Beispiel, wie würden extrahieren ich nur „Text“

<h1>text</h1> 

ich folgendes versucht, aber es scheint alles einschließlich der Tags, anstatt nur den Text zu markieren.

//h1/text() 

Danke für Ihre Hilfe

+0

Sicherlich wählt es keine Tags aus, da Tags keine Objekte zur Auswahl sind: Es gibt keine Tags im Quellbaum, nur Knoten. Es würde helfen, wenn Sie die Symptome beschreiben, die Sie zu dieser falschen Diagnose des Problems geführt haben. –

Antwort

0
` 
DocumentBuilderFactory docFactory = DocumentBuilderFactory 
        .newInstance(); 
      DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

      Document doc = docBuilder.parse(new File("src/myFile.xml")); 

      XPathFactory factory = XPathFactory.newInstance(); 
      XPath xpath = factory.newXPath(); 

      String sessionId = (String) xpath 
    .evaluate(
          "/Envelope/Body/LoginProcessResponse/loginResponse/sessionId", 
          doc, XPathConstants.STRING); 
` 

hier Umschlag ist mein übergeordnetes Element und ich nur auf den gewünschten Pfad durchlaufen (in meinem Fall ist es sessionid). Hoffe es hilft

0

Diese Antwort ist eher eine XSLT Antwort als eine XPath Antwort, aber viele der Konzepte sind dennoch anwendbar.

Der XPath-Ausdruck

//h1/text() 

scheint korrekt zu sein. Es wählt alle text() Knoten aus, die direkte Kinder von <h1> Elementen sind.

Aber ein Problem kann sein, dass die XSL-Standardvorlage noch kopiert alle anderen text() Knoten wie beschrieben here in the W3C specification:

In Abwesenheit eines select-Attribut, das xsl: apply-templates Anweisung verarbeitet alle die untergeordneten Elemente des aktuellen Knotens, einschließlich Textknoten.

So Ihr Problem zu lösen, müssen Sie eine explizite Vorlage definieren, dass
alle anderen Text ignoriert() Knoten wie folgt aus:

<xsl:template match="text()" /> 

Wenn Sie diese Zeile in die XSL Verarbeitung hinzufügen Das Ergebnis wird Ihnen wahrscheinlich angenehmer sein.

+0

Vielen Dank für Ihre Hilfe – affemann2

Verwandte Themen