繁体   English   中英

将 XML 数据附加到 ArrayList

[英]Appending XML data to an ArrayList

我创建了一个 XML 解析器来将信息从 XML 文件检索到 java,然后我试图将这些数据存储到 ArrayList 中,以便将 ArrayList 用于我的方法。 当我打印它时,它似乎工作正常。 但是,由于某种原因,我得到了一个名为 getAllRoutes 的方法,它返回了错误的路由数量

在此处输入图片说明

如果这对 Khaled 有帮助,请告诉我。

尝试这个:

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 javax.xml.xpath.XPathExpressionException;

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

import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.List;
import java.util.ArrayList;
class Main {
  public static Iterable<Node> iterable(final NodeList nodeList) {
    return () -> new Iterator<Node>() {

        private int index = 0;

        @Override
        public boolean hasNext() {
            return index < nodeList.getLength();
        }

        @Override
        public Node next() {
            if (!hasNext())
                throw new NoSuchElementException();
            return nodeList.item(index++); 
        }
    };
  }
  private static List<String> evaluateXPath(Document document, String xpathExpression)
  {
        // Create XPathFactory object
        XPathFactory xpathFactory = XPathFactory.newInstance();

        // Create XPath object
        XPath xpath = xpathFactory.newXPath();

        List<String> values = new ArrayList<>();
        try
        {
            // Create XPathExpression object
            XPathExpression expr = xpath.compile(xpathExpression);

            // Evaluate expression result on XML document
            NodeList nodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);

            for (int i = 0; i < nodes.getLength(); i++) {
                values.add(nodes.item(i).getNodeValue());
            }

        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return values;
    }
  public static void main(String[] args) throws Exception {
        //Build DOM

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true); // never forget this!
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse("data.xml");

        //Create XPath

        XPathFactory xpathfactory = XPathFactory.newInstance();
        XPath xpath = xpathfactory.newXPath();
        String xpathRoot = "//Routes/Route";
        XPathExpression expr = xpath.compile(xpathRoot);
        int i = 0;
        for (Node n : iterable((NodeList) expr.evaluate(doc, XPathConstants.NODESET))) {
          i++;
          String xpe2 = String.format("%s[%d]/%s/text()", xpathRoot, i, "FlightNumber");
          System.out.println("FxPe: " + xpe2);
          System.out.println("Flight Number: " + evaluateXPath(doc, xpe2).get(0));
           for (Node n2 : iterable(n.getChildNodes())) {
              System.out.println(n2.getTextContent());
           }

        }
  }
}

这里看到它的行动

有用的链接:

我会说。 我你的代码: Route r = new Route(); 应该在 if if (c.getNodeName().equals("Route")) ,注释掉的 add 是在正确的地方 - 另一个地方是错误的。

请移动

routes.add(r);

里面

if (c.getNodeName().equals("Route")) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM