Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中从XML文件访问参数_Java_Xml - Fatal编程技术网

在java中从XML文件访问参数

在java中从XML文件访问参数,java,xml,Java,Xml,我有一个库存记录XML文件来存储每个项目的数量 <Inventory> <Item> <ManufacturerName>Brand1</ManufacturerName> <ProductType>TV</ProductType> <Quantity>146</Quantity> </Item> <Item> <ManufacturerN

我有一个库存记录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>

品牌1
电视
146
品牌2
电视
221
品牌3
电视
36
在我的java程序中,如果我收到对某个项目的请求,我将检查该类型项目的剩余数量(数量参数),如果数量足够,则从XML文件中减去该数量。我可以通过循环遍历XML的每个节点并检查我想要的节点来实现这一点,但我希望有一种更快的方法可以立即访问一个特定的节点。也许可以更改XML文件的结构以使其更易于访问,但我想不出一个


在Java中有许多处理XML的方法。例如,你可能想调查一下。使用Castor,您可以将XML“加载”到Java类中,在Java中进行更改,然后将其转换回XML。

在Java中处理XML有很多方法。例如,你可能想调查一下。使用Castor,您可以将XML“加载”到Java类中,在Java中进行更改,然后将其转换回XML。

您需要的是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();
}

}
import javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.xpath.xpath;
导入javax.xml.xpath.XPathConstants;
导入javax.xml.xpath.XPathExpression;
导入javax.xml.xpath.XPathFactory;
导入org.w3c.dom.Document;
导入org.w3c.dom.NodeList;
公共类获取所有的孩子{
公共静态void main(字符串[]args){
试一试{
DocumentBuilderFactory DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder=documentBuilderFactory.newDocumentBuilder();
documentdoc=builder.parse(“/home/eugen/Desktop/input.txt”);
XPathFactory XPathFactory=XPathFactory.newInstance();
XPath=xPathFactory.newXPath();
XPathExpression表达式=xpath.compile(“/Inventory/Item[Quantity>200]/*”);
NodeList nodes=(NodeList)expression.evaluate(doc,XPathConstants.NODESET);

对于(int i=0;i您正在寻找的是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();
}

}
import javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.xpath.xpath;
导入javax.xml.xpath.XPathConstants;
导入javax.xml.xpath.XPathExpression;
导入javax.xml.xpath.XPathFactory;
导入org.w3c.dom.Document;
导入org.w3c.dom.NodeList;
公共类获取所有的孩子{
公共静态void main(字符串[]args){
试一试{
DocumentBuilderFactory DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder=documentBuilderFactory.newDocumentBuilder();
documentdoc=builder.parse(“/home/eugen/Desktop/input.txt”);
XPathFactory XPathFactory=XPathFactory.newInstance();
XPath=xPathFactory.newXPath();
XPathExpression表达式=xpath.compile(“/Inventory/Item[Quantity>200]/*”);
NodeList nodes=(NodeList)expression.evaluate(doc,XPathConstants.NODESET);
for(inti=0;iDOM4J(一个开源xml解析器)非常适合

您可以调用Element.elements()方法来获取其子节点的总数。使用Element.Element(字符串名称)来获取具有该名称的特定节点。 请参阅本API文件: DOM4J(一个开源xml解析器)非常适合

您可以调用Element.elements()方法来获取其子节点的总数。使用Element.Element(字符串名称)来获取具有该名称的特定节点。 请参阅本API文件:

这可能是重复的,例如,你可以用很多方法来实现这一点。这可能是重复的,例如,你可以用很多方法来实现这一点。谢谢,我一直在寻找类似于模式的东西来提取我所需要的。XPathExpression可以做到这一点。谢谢,我正在寻找一些东西与模式类似,可以完全提取我需要的内容。