2012-02-07 8 views
0

各アイテムの数量を格納するための在庫レコードXMLファイルがあります。私のJavaプログラムで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> 

私は、特定の項目の要求を取得する場合、私は(数量パラメータ)を、残りのそのタイプのアイテムの数量をチェックし、十分に存在する場合、XMLファイルからその金額を差し引きます。私は、XMLの各ノードをループし、必要なものをチェックすることでこれを行うことができますが、特定のノードにすぐにアクセスするより高速な方法があることを望んでいました。おそらく、XMLファイルの構造を変更してアクセスしやすくすることはできますが、私はそれを考えることはできません。

+0

これは重複している可能性があります。たとえば、これを使用してこれを行うことができます。 http://stackoverflow.com/questions/8578455/java-all-child-element-reading-in-xml –

答えて

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はそれを行います。 –

+0

@SotiriosDelimanolisがうれしいです;) – Eugene

1

JavaでXMLを処理する多くの方法があります。たとえば、Castorを調べることができます。 Castorを使用すると、XMLをJavaクラスに「ロード」し、Javaで変更してXMLに変換し直します。あなたが探しているものを

0

DOM4J(オープンソースxmlパーサーhttp://dom4j.sourceforge.net/)が適しています。

Element.elements()メソッドを呼び出して、その子ノードの合計数を取得できます。名前を持つ特定のノードを取得するには、Element.element(String name)を使用します。 このAPIを参照してください。doc: http://dom4j.sourceforge.net/dom4j-1.6.1/apidocs/org/dom4j/Element.html#element%28java.lang.String%29

関連する問題