2

给定一个如下所示的 xml 文档:

 <?xml version="1.0"?>
     <xml_api_reply version="1">
      <weather section="0" row="0" mobile_zipped="1" mobile_row="0"     tab_id="0" module_id="0">
        <forecast_information>
            <city data="Cordova, Andalusia"/>
            <postal_code data="cordoba"/>
            <latitude_e6 data=""/>
            <longitude_e6 data=""/>
            <forecast_date data="2012-07-18"/>
            <current_date_time data="1970-01-01 00:00:00 +0000"/>
            <unit_system data="SI"/>
         </forecast_information>

我想在 的帮助下显示城市数据邮政编码日期属性System.out.println()

任何想法?

4

6 回答 6

9

我有解决办法。我从未在此博客或任何其他博客中看到过此解决方案。我希望它对其他人有用。

package Main;

import java.io.File;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;

public class XmlTest
{

    public static void main(String argv[]) 
    {

        try 
        {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(new File("xmlPrueba.xml"));
            doc.getDocumentElement().normalize();



            System.out.println("City: " +
                    documento.getDocumentElement().getChildNodes().item(0).getFirstChild().getChildNodes().item(0).getAttributes().getNamedItem("data").getNodeValue());

            System.out.println("Postal Code: " +
                    documento.getDocumentElement().getChildNodes().item(0).getFirstChild().getChildNodes().item(1).getAttributes().getNamedItem("data").getNodeValue());

            System.out.println("Date: " +
                    documento.getDocumentElement().getChildNodes().item(0).getFirstChild().getChildNodes().item(4).getAttributes().getNamedItem("data").getNodeValue());

        } catch (Exception e) 
        {
            e.printStackTrace();
        }

    }
}

或者更容易......

            System.out.println("City: " +
                doc.getDocumentElement().getElementsByTagName("forecast_information").item(0).getChildNodes().item(0).getAttributes().getNamedItem("data").getNodeValue());

            System.out.println("Postal Code: " +
                doc.getDocumentElement().getElementsByTagName("forecast_information").item(0).getChildNodes().item(1).getAttributes().getNamedItem("data").getNodeValue());

            System.out.println("Date: " +
                doc.getDocumentElement().getElementsByTagName("forecast_information").item(0).getChildNodes().item(4).getAttributes().getNamedItem("data").getNodeValue());

.....

谢谢您的帮助!!!

于 2012-07-20T21:02:41.280 回答
3

只需稍微清理一下类型声明,基本的空检查:

从 'dom' 值中的任何节点开始

NodeList l = dom.getElementsByTagName("tagname");

for (int j=0; j<l.getLength(); ++j) {
    Node prop = l.item(j);
    NamedNodeMap attr = prop.getAttributes();
    if (null != attr) {
        Node p = attr.getNamedItem("data");
        log.debug(p.getNodeValue());
    }
}
于 2013-08-12T23:29:38.007 回答
2

Java 有几个用于 XML 解析的特性——SAXStAXDOM API。DOM API 对初学者来说是最舒服的。看看这个不错的教程

我必须在 XSLT 上反驳 Thom。虽然是一个强大的 API,但它相当复杂,可能会让初学者感到害怕和沮丧。

于 2012-07-19T11:49:19.507 回答
1

DOM 和 SAX 都是低级 API,很难使用它们。这个问题是关于

Java中的XML解析

所以这可以通过 SAX 和 DOM 来实现,但是使用Apache Digester会更容易。这也称为数据绑定

希望这会帮助你。

于 2012-07-19T12:16:34.867 回答
1

你应该看看这个:

JDOM:http ://www.javaworld.com/jw-05-2000/jw-0518-jdom.html

SAX:http ://en.wikipedia.org/wiki/Simple_API_for_XML

Java XML 的简单解析器

于 2012-07-19T11:49:37.090 回答
0

查找 XSLT。我从未使用过它,但它可以格式化 XML 文档。

于 2012-07-19T11:48:16.200 回答