1

我从教程中获得了以下代码,用于在 java 应用程序中打印出 xml 属性。最终我会将它们作为字符串分配给变量。

        doc.getDocumentElement().normalize();
        System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
        NodeList nList = doc.getElementsByTagName("xyz:xyzcontent");
        System.out.println("----------------------------");

        for (int temp = 0; temp < nList.getLength(); temp++) {

            Node nNode = nList.item(temp);

            System.out.println("\nCurrent Element is " + nNode.getNodeName());

            if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                Element eElement = (Element) nNode;

                eElement.getAttribute("id");
                System.out.println("Link : " + eElement.getElementsByTagName("link").item(0).getTextContent());

            }
        }

这工作正常,但我需要访问特定的<date>. 有多个<date>属性。例如:

<releasedate>
   <date>1300981500000</date>
</releasedate>
<createddate>
   <date>1300981385795</date>
</createddate>

我怎样才能抓住<createddated><date>价值而不是<releasedate><date>价值?似乎它只是选择了它找到的第一个。谢谢。

4

2 回答 2

1

我会使用 XPathExpression。

代码看起来像这样:

XPathFactory xfactory = XPathFactory.newInstance();
XPath xpath = xfactory.newXPath();
XPathExpression createdDateExpression = xpath.compile("/createddate/date"); //or actual path
String createdDateStr = createdDateExpression.evaluate(doc);

编译后,您可以在任何文档上使用该表达式。

我喜欢使用 XPath 从 XML 中提取几个元素,而不是将整个文档解析为一个对象。

于 2013-10-15T14:23:20.763 回答
0
public static void main(String[] args) throws Throwable, SAXException, IOException {

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(your stream);
    NodeList n = doc.getElementsByTagName("root").item(0).getChildNodes();
    for(int i=0; i<n.getLength(); i++) {
        Node item = n.item(i);
        if(item instanceof Element) {
            String e = ((Element)item).getElementsByTagName("date").item(0).getTextContent();
            System.out.println();
            System.out.println(((Element) item).getTagName());
            System.out.println(e);
            //if you need to convert to date:
            System.out.println(new Date(Long.parseLong(e)));
        }
    }
}

您必须使用 for 来获取元素。您无法获得特定节点,如没有任何库的“root\releasedate\date”。我的输出:

releasedate
1300981500000
Thu Mar 24 16:45:00 CET 2011

createddate
1300981385795
Thu Mar 24 16:43:05 CET 2011
于 2013-10-15T14:37:42.390 回答