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

如何读取/解析xml java STAX(机制)

皮自明
2023-03-14

我试图理解STAX java的机制是如何工作的。

我有这个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<orders>
    <order created='2012-07-12T15:29:33.000' ID='2343'>
        <product>
            <description>Sony 54.6" (Diag) Xbr Hx929 Internet Tv</description>
            <gtin>00027242816657</gtin>
            <price currency="USD">2999.99</price>
            <supplier>Sony</supplier>
        </product>
        <product>
            <description>Apple iPad 2 with Wi-Fi 16GB - iOS 5 - Black</description>
            <gtin>00885909464517</gtin>
            <price currency="USD">399.0</price>
            <supplier>Apple</supplier>
        </product>
        <product>
            <description>Sony NWZ-E464 8GB E Series Walkman Video MP3 Player Blue</description>
            <gtin>00027242831438</gtin>
            <price currency="USD">91.99</price>
            <supplier>Sony</supplier>
        </product>
    </order>
    <order created='2012-07-13T16:02:22.000' ID='2344'>
        <product>
            <description>Apple MacBook Air A 11.6" Mac OS X v10.7 Lion MacBook</description>
            <gtin>00885909464043</gtin>
            <price currency="USD">1149.0</price>
            <supplier>Apple</supplier>
        </product>
        <product>
            <description>Panasonic TC-L47E50 47" Smart TV Viera E50 Series LED HDTV</description>
            <gtin>00885170076471</gtin>
            <price currency="USD">999.99</price>
            <supplier>Panasonic</supplier>
        </product>
    </order>
</orders>

为了模仿这个XML文件的行为,我们创建了一个具有相似属性的对象

public class Product {

    private int orderID;
    private String createTime;
    private String description;
    private String gtin;
    private String price;
    private String supplier;
//getter and setter
}

有了这个,我尝试读取我的xml文件:

if (xmlEvent.isStartElement()){
               StartElement startElement = xmlEvent.asStartElement();
               if(startElement.getName().getLocalPart().equals("order")){
                   prod = new Product();
                   Attribute idAttr = startElement.getAttributeByName(new QName("ID"));
                   if(idAttr != null){
                       prod.setgetOrderID(Integer.parseInt(idAttr.getValue()));
                   }

                   Attribute orderTime = startElement.getAttributeByName(new QName("created"));
                   if(orderTime != null){
                       prod.setgetCreateTime(orderTime.getValue());
                   }




                   counter++;
                   //System.out.println("Obiect creat");
                 System.out.println(counter);
               }
               //set the other varibles from xml elements
               else if(startElement.getName().getLocalPart().equals("description")){
                   xmlEvent = xmlEventReader.nextEvent();
                   prod.setDescription(xmlEvent.asCharacters().getData());

               }else if(startElement.getName().getLocalPart().equals("gtin")){
                   xmlEvent = xmlEventReader.nextEvent();
                   prod.setGtin(xmlEvent.asCharacters().getData());

               }else if(startElement.getName().getLocalPart().equals("price")){
                   xmlEvent = xmlEventReader.nextEvent();
                   prod.setPrice(xmlEvent.asCharacters().getData());
               }else if(startElement.getName().getLocalPart().equals("supplier")){
                   xmlEvent = xmlEventReader.nextEvent();
                   prod.setSupplier(xmlEvent.asCharacters().getData());

               }

我的问题是,它们是5个产品,但当我试图输出它们时,它们不是正确的数字。1.If in:If(startElement.getName().getLocalPart()。equals(“orders”))最后一个参数是“oders”,在输出中我只看到一个对象(松下TC-L47E50 47“智能电视Viera E50系列LED高清电视)

为了阅读整个信息,我需要做什么修改。我的范围是读取属性“created”和“id”的顺序,但与我的所有对象,而不是1或2谢谢!

共有1个答案

夏季萌
2023-03-14

如果你使用的是JaxB,你不需要创建类,甚至不需要自己解析XML文件,这就是为什么JaxB是为!:)

使用JaxB/UnmarshallerXSD读写xml的基本步骤

>

  • 为<code>XML
  • 将其放置在项目文件夹中
  • 右键单击<code>XSD
  • 使用<code>解组器

    Unmarshaller u = jc.createUnmarshaller();
    Orders os = (Orders) u.unmarshal( new FileInputStream( "orders.xml" ) );
    

    就这样…JaxB将负责类、属性、填充、写入/读取xml。。。

  •  类似资料:
    • 本文向大家介绍java如何解析/读取xml文件,包括了java如何解析/读取xml文件的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java解析/读取xml文件的方法,供大家参考,具体内容如下 XML文件 Java 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助。

    • 问题内容: 我需要挖掘大多数已知文档文件的 内容 ,例如: pdf格式 html doc / docx等 对于大多数这些文件格式,我计划使用: http://tika.apache.org/ 但截至目前,它不支持MHTML(* .mht)文件。(http://en.wikipedia.org/wiki/MHTML)C#中的示例很少(http://www.codeproject.com/KB/ fi

    • 我通过Javascript调用一个帖子请求,看起来是这样的, 我试图收回这样的价值观, 这是返回为空,我怎么能从PHP中的获取后请求检索值。谢啦

    • 问题内容: 呼吁专家,专家和其他人来帮助阅读和解析python文件。 在第六版的第751页。或第7版第800页。Superbible OpenGL的附录B。SBM文件格式似乎在某种程度上很好地解释了该格式。 我试图在python中实现此文件格式的阅读器。 好的,已经取得了进展。我已经将Rabbid76惊人的代码合并到提供的源代码中。尽管我正在尝试取得更多进展。 更新2019年6月23日-重大进展,

    • XSLX,如何读取,并解析excel中的内容?打印出并不包含图片内容?

    • 本文向大家介绍python 如何读、写、解析CSV文件,包括了python 如何读、写、解析CSV文件的使用技巧和注意事项,需要的朋友参考一下 您知道将表格数据存储到纯文本文件背后的机制是什么吗?答案是CSV(逗号分隔值)文件,该文件允许将数据转换为纯文本格式。在这篇文章中关于“在Python如何阅读CSV文件”中,我们将学习如何读,写和解析的CSV文件的Python。 将详细讨论以下方面: 什么