当前位置: 首页 > 知识库问答 >
问题:

将XML数据附加到ArrayList

哈骞仕
2023-03-14

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

共有2个答案

曾景龙
2023-03-14

如果这对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());
           }

        }
  }
}

在此处查看它的实际操作

有用的链接:

>

  • 1: 遍历节点列表

    2: XPath备忘单

    3: Java XPath示例a和b

    4: 节点列表Java文档

    5:节点Java文档

    我会说。I您的代码:Route r=new Route() 应该在if语句<代码>if(c.getNodeName())中。等于(“路由”))注释掉的add位于正确的位置-另一个位置错误。

  • 葛嘉悦
    2023-03-14

    请移动

    routes.add(r);
    

    里面

    if (c.getNodeName().equals("Route")) {
    
     类似资料:
    • 问题内容: 我正在尝试创建一个将条目添加到json文件的函数。最终,我想要一个看起来像 等。这就是我所拥有的: 这确实会创建一个条目,例如。但是,如果我再次使用此函数(使用不同的名称和网址),第一个函数将被覆盖。我需要怎么做才能将第二个(第三个…)条目附加到第一个? 编辑 :对此问题的第一个答案和评论已经指出了我在写块中未使用的明显事实。不过,我看不出该怎么做。例如,以下内容显然不会起作用: 问题

    • 问题内容: 我正在使用AJAX将数据附加到div元素,从JavaScript填充div,如何在不丢失div中找到的先前数据的情况下将新数据附加到div? 问题答案: 尝试这个:

    • 问题内容: 我有这个.json文件: 这是我的PHP代码: 问题是,我不确定如何实现它。每次提交表单时,我都会在上面调用此代码,因此我需要ID递增,并且还要使用和保持有效的JSON结构,这可能吗? 问题答案:

    • 我有3个维度为(a*2、b*2、c*2)的数据帧,而a、b、c是不同的数字。我想把它们添加到一个csv文件中,但每次都写不出来。我使用了csv的熊猫数据帧输出端 但做不到。 我的代码- 但是,我得到的最终输出是最后一个数据帧,而不是所有其他数据帧。

    • 问题内容: 如我所见,java mongo驱动程序不提供从现有gridFS文件获取的功能 我必须直接创建或使用方法。 是否缺少Java驱动程序或gridfs的限制? 除了创建新文件/删除旧文件之外,您能否建议其他解决方法? 谢谢 问题答案: GridFS不是MongoDB的核心功能,而是存储带有随附元数据的二进制数据的约定。您应该能够以通常的方式修改集合中的任何文档,同时保持相应文档的完整性。主要

    • 我想将数据附加到3个不同的工作表中(使用Java和Google工作表API)。 例如,“I like turtles”(我喜欢海龟)到sheetId为1的第一张纸,“123”到sheetId为2的第二张纸,以及到sheetId为3的第二张纸的任何范围。如何附加该数据?更重要的是,如何从图纸中获取图纸ID并设置活动图纸?或者任何其他的方法。有什么建议或例子吗? 非常感谢。