Java 从文档中读取多个级别的xml属性`

Java 从文档中读取多个级别的xml属性`,java,xml,document,Java,Xml,Document,我从教程中获得了以下代码,用于在java应用程序中打印xml属性。最终,我将把它们作为字符串分配给变量 doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("xyz:xyzcontent

我从教程中获得了以下代码,用于在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());

            }
        }
doc.getDocumentElement().normalize();
System.out.println(“根元素:+doc.getDocumentElement().getNodeName());
NodeList nList=doc.getElementsByTagName(“xyz:xyzcontent”);
System.out.println(“-------------------------------”;
对于(int-temp=0;temp
这工作正常,但我需要访问特定的
。有多个
属性。例如:

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

1300981500000
1300981385795

如何获取
值而不是
值?它似乎只是选择了它找到的第一个。谢谢。

我会使用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中提取一些精选元素,而不是将整个文档解析为一个对象

我会使用XPathExpression

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)));
        }
    }
}
代码如下所示:

XPathFactory xfactory = XPathFactory.newInstance();
XPath xpath = xfactory.newXPath();
XPathExpression createdDateExpression = xpath.compile("/createddate/date"); //or actual path
String createdDateStr = createdDateExpression.evaluate(doc);
编译任何文档后,都可以在其上使用该表达式


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

不幸的是,这不会返回CreatedDataTestr的任何结果。我使用的是/xyz:xyzcontent/createddate/date的完整路径。请阅读如何在XPath对象中注册名称空间(这相当简单):这很有帮助,但我的第一个示例似乎非常困难。我将提交另一个问题。不幸的是,这不会返回CreatedDataTestr的任何结果。我使用的是/xyz:xyzcontent/createddate/date的完整路径。请阅读如何在XPath对象中注册名称空间(这相当简单):这很有帮助,但我的第一个示例似乎非常困难。我将提交另一个问题。
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)));
        }
    }
}