0

やあ!XPath を使用して XML 文書を解析するのに時間を費やしました。簡単そうに見えて最初から苦労しました。私のコードは次のとおりです。

public class QueryXML3 {

    public static void main(String[] args) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder;
        Document doc = null;

        try {
            builder = factory.newDocumentBuilder();
            //doc = builder.parse("SampleExample.xml");
            InputStream is = QueryXML3.class.getClassLoader().getResourceAsStream("SampleXml.xml");
            doc = builder.parse(is);

            XPathFactory xpathFactory = XPathFactory.newInstance();

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


            Node parNode = getParameterNode(doc, xpath);
            System.out.println("parameter node:" + parNode);

            NodeList res = getParameterNodeList(doc, xpath );
            System.out.println("List of nodes" + res);



        } catch (ParserConfigurationException | SAXException | IOException e) {
            e.printStackTrace();
        }

    }

    public static Node getParameterNode(Document doc, XPath xpath) {
        Node res = null;
        try {
            res = (Node) xpath.evaluate("/definitions/process", doc, XPathConstants.NODE);

        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return res;
    }

    public static NodeList getParameterNodeList(Document doc, XPath xpath) {
        NodeList nodeList = null;
        try {
            nodeList = (NodeList) xpath.evaluate("/definitions/process", doc, XPathConstants.NODESET);

            for (int i = 0; i > nodeList.getLength(); i++) {
                System.out.print(nodeList.item(i).getNodeName() + " ");
            }

        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return nodeList;
    }
}

その結果、私はこれを得る:

パラメータ node:[プロセス: null] ノードのリスト com.sun.org.apache.xml.internal.dtm.ref.DTMNodeList@2f17aadf

XMLファイルのすべてのノードとそれらの属性を出力したいだけです...

4

2 に答える 2

0

JSoupJDomなどのサードパーティ パッケージを使用して、Java で XML ファイルを簡単に解析できます。

例として、JSoup を使用した XML ファイル要素の簡単な出力を次に示します。

<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Reminder</heading>
   <body>Don't forget me this weekend!</body>
</note>

すべての要素と選択された要素を出力する Java コード<from>:

String xml = "<note>\n"
        + "<to>Tove</to>\n"
        + "<from>Jani</from>\n"
        + "<heading>Reminder</heading>\n"
        + "<body>Don't forget me this weekend!</body>\n"
        + "</note>";
Document doc = Jsoup.parse(xml, "", Parser.xmlParser());
for (Element e : doc.children()) {
    System.out.println(e);
}

Element fromElement = doc.select("from").first();

System.out.println("\nThis is the <from>-element content:\n" + fromElement);
于 2013-11-13T11:19:39.887 に答える