2011-04-19 11 views
2

je besoin d'extraire (en Java) la balise pour la balise nom donné à partir du fichier XML comme ceci:analyse syntaxique Java XML

Voici mon fichier XML:

<aa> 
    <bb> 
    <name>k1</name> 
    <value>5</value> 
    </bb> 
    <bb> 
    <name>k2</name> 
    <value>7</value> 
</bb> 
</aa> 

entrée à la fonction: full path to <name> tag, e.g.: /aa/bb/name=k2
(sortie pour cet exemple doit retourner 7)

également question plus avancée: Je dois extraire tous les paires nom: valeur à partir du fichier XML, le nom est donné par expression régulière Je pense que XPath est le bon outil ici, mais diable dans les détails.

+0

Avez-vous une question? (Et par là, je veux dire une question ** spécifique.) –

+0

Je pense que vous avez trois questions ici. 1. Pour obtenir la valeur 7, c'est-à-dire la valeur de value_tag_start dans le second bb_tag_start. 2. Pour obtenir toutes les paires de valeur de nom, c'est-à-dire le nom de l'étiquette et la valeur. 3. Si le nom du tag est donné en tant qu'expression régulière, obtenez la valeur. S'il vous plaît clarifier – Ammu

+0

À: Andrew Thompson. J'ai les questions 1 et 3 de votre liste. Merci! – user607573

Répondre

2

Vous pouvez utiliser les API de javax.xml.xpath qui sont inclus dans le cadre de Java SE 5:

import java.io.FileReader; 

import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathExpression; 
import javax.xml.xpath.XPathFactory; 

import org.xml.sax.InputSource; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     XPathFactory xpf = XPathFactory.newInstance(); 
     XPath xpath = xpf.newXPath(); 
     XPathExpression xpe = xpath.compile("//bb[name/text()='k2']/value"); 

     InputSource xml = new InputSource(new FileReader("input.xml")); 
     String result = xpe.evaluate(xml); 
     System.out.println(result); 
    } 
} 
0

Essayez jcabi-xml (voir ce blog post) avec une seule ligne:

String found = new XMLDocument(text).xpath("/aa/bb[name='k2']/text()").get(0); 
0
import org.jdom.Document; 
import org.jdom.Element; 
import org.jdom.JDOMException; 
import org.jdom.input.SAXBuilder; 
import org.jdom.xpath.XPath; 
import org.junit.Test; 

import static org.junit.Assert.*; 

import java.io.File; 
import java.io.IOException; 

import javax.xml.xpath.XPathExpressionException; 

public class XmlParsingTest { 
    @Test 
    public void testParsing() throws XPathExpressionException, JDOMException, IOException { 

     SAXBuilder builder = new SAXBuilder(); 
     File xmlFile = new File("src/test/resources/yourXMLDoc.xml"); 

     Document origDoc = (Document) builder.build(xmlFile); 

     XPath xPathMonsOccCategoryIdInOriginalDoc = XPath.newInstance("//bb[name/text()='k2']/value"); 

     Element element = (Element) xPathMonsOccCategoryIdInOriginalDoc.selectSingleNode(origDoc.getRootElement()); 

     assertEquals("7", element.getTextTrim()); 


} 

}

0

est sous le code d'extraction valeur à l'aide vtd-xml.

import com.ximpleware.*; 

public class extractValue{ 
    public static void main(String s[]) throws VTDException, IOException{ 
     VTDGen vg = new VTDGen(); 
     if (!vg.parseFile("input.xml", false)); 
     VTDNav vn = vg.getNav(); 
     AutoPilot ap = new AutoPilot(vn); 
     ap.selectXPath("/aa/bb[name='k1']/value"); 
     int i=0; 
     while ((i=ap.evalXPath())!=-1){ 
      System.out.println(" value ===>"+vn.toString(i)); 
     } 
    } 
}