2012-02-07 53 views
0

我有一個庫存記錄XML文件來存儲每個項目的數量。從java中的XML文件訪問參數

<Inventory> 
<Item> 
    <ManufacturerName>Brand1</ManufacturerName> 
    <ProductType>TV</ProductType> 
    <Quantity>146</Quantity> 
</Item> 
<Item> 
    <ManufacturerName>Brand2</ManufacturerName> 
    <ProductType>TV</ProductType> 
    <Quantity>221</Quantity> 
</Item> 
<Item> 
    <ManufacturerName>Brand3</ManufacturerName> 
    <ProductType>TV</ProductType> 
    <Quantity>36</Quantity> 
</Item> 
</Inventory> 

在我的java程序,如果我得到了某一個項目的請求,我檢查該類型的項目剩餘(數量參數)的數量,以及是否有足夠的,減去從XML文件量。我可以通過遍歷XML的每個節點並檢查一個我想要的節點來做到這一點,但我希望能夠立即訪問一個特定的節點。也許XML文件的結構可以改變,使其更容易訪問,但我想不出一個。

+0

這可能是重複的,可能有很多方法可以通過使用這個例子。 http://stackoverflow.com/questions/8578455/java-all-child-element-reading-in-xml – 2012-02-07 18:52:49

回答

3

你所尋找的是XPath的,這裏是一個小樣本:

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathExpression; 
import javax.xml.xpath.XPathFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 

public class GetAllTheChildren { 
public static void main(String[] args) { 

try{ 
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
    documentBuilderFactory.setNamespaceAware(true); 
    DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); 
    Document doc = builder.parse("/home/eugen/Desktop/input.txt"); 

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

    XPathExpression expression = xpath.compile("/Inventory/Item[Quantity>200]/*"); 

    NodeList nodes = (NodeList) expression.evaluate(doc, XPathConstants.NODESET); 

    for(int i = 0;i<nodes.getLength();i++){ 
     System.out.println(nodes.item(i).getNodeName()); 
     System.out.println(nodes.item(i).getTextContent()); 
    } 
} catch(Exception exception){ 
    exception.printStackTrace(); 
} 

} 

}

你可能需要打多一點吧

乾杯,尤金。

+0

謝謝,我正在尋找類似於模式的東西來拉我需要的東西。 XPathExpression可以做到這一點。 – 2012-02-07 19:03:43

+0

@SotiriosDelimanolis很高興我能幫忙;) – Eugene 2012-02-07 19:06:09

1

有很多種方法來應對Java的XML。例如,您可能想要查看Castor。通過Castor,您可以將XML「加載」到Java類中,在Java中進行更改,然後將其轉換回XML。