簡體   English   中英

如何在Java中使用Sax / Dom解析器讀取xml文件?

[英]How to read xml file using Sax/Dom parser in Java?

我想問你一個問題。 我想使用sax / dom解析器從xml讀取數據,但是我不知道如何在Java中實現代碼。 任何幫助都受到高度贊賞...

以下有關要求的文字:

1 / xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<rootElement>
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString>
    <![CDATA[SELECT * FROM ORDERS]]>
</queryString>
<field name="ORDERID" class="java.lang.Integer"/>
<field name="CUSTOMERID" class="java.lang.String"/>
<field name="EMPLOYEEID" class="java.lang.Integer"/>
<field name="ORDERDATE" class="java.sql.Timestamp"/>
<field name="REQUIREDDATE" class="java.sql.Timestamp"/>
<field name="SHIPPEDDATE" class="java.sql.Timestamp"/>
<field name="SHIPVIA" class="java.lang.Integer"/>
<field name="FREIGHT" class="java.math.BigDecimal"/>
<field name="SHIPNAME" class="java.lang.String"/>
<field name="SHIPADDRESS" class="java.lang.String"/>
<field name="SHIPCITY" class="java.lang.String"/>
<field name="SHIPREGION" class="java.lang.String"/>
<field name="SHIPPOSTALCODE" class="java.lang.String"/>
<field name="SHIPCOUNTRY" class="java.lang.String"/>
<background>
    <band splitType="Stretch"/>
</background>
<columnHeader>
    <band height="20" splitType="Stretch">
        <staticText>
            <reportElement uuid="da31a9d4-8ee7-481d-8b51-270539a2fdec" x="460" y="0" width="92" height="20"/>
            <textElement>
                <font isBold="true" isItalic="true" isUnderline="true"/>
            </textElement>
            <text><![CDATA[SHIPPEDDATE]]></text>
        </staticText>
    </band>
</columnHeader>
<detail>
    <band height="20" splitType="Stretch">
        <textField>
            <reportElement uuid="60fb99da-64ef-4bf9-8a96-687c433be35a" x="460" y="0" width="92" height="20"/>
            <textElement>
                <font isBold="true" isItalic="true" isUnderline="true"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{SHIPPEDDATE}]]></textFieldExpression>
        </textField>
    </band>
</detail>
</rootElement>

2 /預期結果:

element         : property
elment value    : null
attribute name  : name
attribute value : ireport.zoom 
attribute name  : value
attribute value : 1.0 

element         : property
elment value    : null
attribute name  : name
attribute value : ireport.x
attribute name  : value
attribute value : 0

element         : property
elment value    : null
attribute name  : name
attribute value : ireport.y
attribute name  : value
attribute value : 0

element         : queryString
elment value    : SELECT * FROM ORDERS
attribute name  : null
attribute value : null

element         : ORDERID
attribute name  : class
attribute value : java.lang.Integer

關於使用Java程序進行sax / dom解析器技術的任何想法? 提前致謝。

與此主題相關的SAX示例教程是一個很好的開始。


SAXParser文檔中所見,一種解析方法是使用DefaultHandler

您主要關心並需要覆蓋的三個“事件”是startElementendElementcharacters

startElement內部,您將捕獲標簽及其關聯的AttributesqName (元素)。

characters內部,您將捕獲標簽值(元素值)。

標簽關閉時,您將捕獲所需的所有必需數據。 您可以使用endElement打印/存儲該信息。


您將從DefaultHandler擴展開始

class MyHandler extends DefaultHandler {
  @Override
  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
     //Capture tag name and attributes
     super.startElement(uri, localName, qName, attributes);  
  }

  @Override
 public void characters(char[] ch, int start, int length) throws SAXException {
     //Capture value.  
     super.characters(ch, start, length);  
  }

  @Override
  public void endElement(String uri, String localName, String qName) throws SAXException {
    //Print or store the information
  }
}

並相應地為每個事件提供實施。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM