2017-07-04 1 views
0

J'ai un programme pour lire le fichier XML. Récemment, mon fournisseur a changé une partie du fichier XML source et je n'ai aucune idée de comment lire les parties modifiées.JAVA en lecture XML, directement à partir de l'élément

XML:

<Product> 
<Weight>5,000</Weight> 
<Color>blue</Color> 
<Stock Warehouse_name="London" Availability="5,00"/> 
<Stock Warehouse_name="Berlin" Availability="0,00"/> 
<Stock Warehouse_name="Sydney" Availability="42,00"/> 
</Product> 

Peut-être que vous voyez déjà mon problème. Le poids et la couleur sont OK, mais le stock est mon problème. Au lieu de donner l'information entre les éléments, l'information est directe dans l'élément. J'utilise la méthode standard pour récupérer les données:

color = (eElement.getElementsByTagName("Color").item(0).getTextContent()); 

Une suggestion? Je suis assez nouveau à Java, alors expliquez-moi s'il vous plaît aussi simple que possible.

Répondre

0

Les valeurs que vous souhaitez récupérer sont appelées attributes. Vous pouvez utiliser getAttribute sur Element pour récupérer les valeurs des attributs.

Ci-dessous le code devrait travailler pour le même:

NodeList stockList = eElement.getElementsByTagName("Stock"); 
for (int i = 0; i < stockList.getLength(); i++) 
{ 
    Node stockNode = stockList.item(i); 
    if (stockNode.getNodeType() == Node.ELEMENT_NODE) 
    { 
     Element stockElement = (Element)stockNode; 
     System.out.println("Warehouse name : " + stockElement.getAttribute("Warehouse_name")); 
     System.out.println("Availability : " + stockElement.getAttribute("Availability")); 
    } 
} 
+0

Merci, fonctionne très bien. – nilrem

2

Vous devez obtenir les nœuds Stock et convertir Element, vous pouvez obtenir l'attribut que vous voulez.

final DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
// textoXml contains your xml file 
final Document doc = dBuilder.parse(new ByteArrayInputStream(textoXml.getBytes())); 
// Here you gat the Stock node you want and cast to Element 
final Element eStock = (Element) doc.getElementsByTagName("Stock").item(0); 
final String warehouseName = eStock.getAttribute("Warehouse_name"); 

Vous pouvez voir d'autres exemples dans https://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

-1

je vous recommande JDOM http://www.jdom.org/

package javaxml; 

import java.io.File; 
import java.util.List; 

import org.jdom2.Document; 
import org.jdom2.Element; 
import org.jdom2.input.SAXBuilder; 

public class DomTest { 

    public void test(){ 
     try{ 
      String xmlPath = "myfile.xml"; 
      File xmlFile = new File(xmlPath); 
      SAXBuilder sax = new SAXBuilder();  
      Document xDoc = sax.build(xmlFile); 
      List<Element> xStocks = xDoc.getRootElement().getChildren("Stock"); 
      for(Element xStock : xStocks){ 
       System.out.println(xStock.getAttributeValue("Warehouse_name")); 
       System.out.println(xStock.getAttributeValue("Availability")); 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Il est préférable d'éviter la dépendance aux bibliothèques tierces lorsque Java SE est entièrement capable de la même fonctionnalité. – VGR

+0

Je veux que vous vous voyiez en utilisant uniquement des bibliothèques Java lisant plusieurs espaces de noms: D – shop350