2017-07-04 82 views
0

我有读取XML文件的程序。最近我的供应商更改了源XML文件的一部分,我不知道如何阅读更改的部分。JAVA读取XML,直接从元素

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> 

也许你已经看到了我的问题。重量和颜色都可以,但股票是我的问题。而不是给元素之间的信息,信息是直接的元素。我正在使用标准方法检索数据:

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

任何建议?我对Java很新,所以请尽可能简单地向我解释一下。

回答

0

要检索的值称为attributes。 您可以使用getAttributeElement来检索属性的值。

下面的代码应该同样的工作:

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

感谢,工程巨大。 – nilrem

2

你需要获得股票的节点,并转换为元素,那么你就可以得到你想要的属性。

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"); 

你可以看到https://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

-1

一些其他的例子,我建议你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

当Java SE完全具有相同的功能时,最好避免依赖第三方库。 – VGR

+0

我想哟看到你只使用读取多个命名空间的Java库:D – shop350