使用java读取xml文件

时间:2012-07-26 06:00:13

标签: java xml

以下是我的xml文件格式

<?xml version="1.0" encoding="UTF-8"?>
<Hospitals>
<Hospital hospitalId="14">
    <HospitalName>aaa</HospitalName>
        <Department>
            <DepartmentName departmentId="21">card</DepartmentName> 
                <Clinics>
                    <ClinicName  clinicId="38">c7</ClinicName>
                    <Status Flag="0">0</Status>
                    <ClinicName  clinicId="39">c2</ClinicName>
                    <Status Flag="0">0</Status>

            </Clinics>
       </Department>
 </Hospital>
<Hospital hospitalId="15">
     <HospitalName>bbbb</HospitalName>
        <Department>
            <DepartmentName departmentId="22">dental</DepartmentName>
                <Clinics>
                    <ClinicName  clinicId="35">c6</ClinicName>
                    <Status Flag="0">0</Status>
                    <ClinicName  clinicId="36">c5</ClinicName>
                    <Status Flag="0">0</Status>
                                          </Clinics>
           </Department>
</Hospital>

帮助我从xml中读取java代码以打印如下所示的对象。我尝试使用this,但我能够打印出如下所示的格式

Root element :Hospitals
----------------------
 hospital Id : 14
 Hospital Name : aaa
 department Id : 21
 Department Name : card
 clinicId : 38
 ClinicName : c7
 status : 0
 Flag : 0
 clinicId : 38
 ClinicName : c2
 status : 0
 Flag : 0
----------------------
hospital Id : 15
Hospital Name : bbbb    
department Id : 22
Department Name : dental
clinicId : 35
ClinicName : c6
status : 0
Flag : 0
clinicId : 38
ClinicName : c5
status : 0
Flag : 0

任何形式的帮助都会帮助我快速完成工作......提前致谢

3 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的Java?如果您为XML定义了XSD,那么您可以通过许多选项在java对象中解析XML,并且可以读取或执行您想要对数据执行的任何操作。这里有几个选项

  1. JAXB 2.0
  2. XStream
  3. 还有其他几个来自Apache和其他几个,如果你使用的是JDK 6.0+ JaxB正在提供JDK,而Xstream非常轻巧且易于使用。

答案 1 :(得分:0)

嗯,众所周知,XML解析是使用DOM和SAX完成的,但它们是核心。 初学者很难使用复杂的API进行管理。 我宁愿建议使用框架作品Apache Digester

它会很容易,它也使用SAX,但在现场,你不需要使用SAX。

答案 2 :(得分:0)

我建议使用XSLT或XQuery进行此操作;在这两种情况下,代码都比在Java中简单得多。如果您需要在Java应用程序中对数据进行一些复杂的处理,那么使用Java是合理的,但如果您只想提取一些信息并将其输出到文本文件,那么使用更高级别的工具会更好。

这是XSLT样式表的入门名单:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text"/>

<xsl:variable name="NL" select="'&#xa;'"/>

<xsl:template match="Hospitals">
  <xsl:text>Root element: Hospitals</xsl:text>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="Hospital">
  <xsl:text>&#xa;------------------</xsl:text>
  <xsl:text>&#xa;hospital id: </xsl:text>
  <xsl:value-of select="@hospitalId"/>
  <xsl:text>&#xa;</xsl:text>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="HospitalName">
  <xsl:text>&#xa;hospital name: </xsl:text>
  <xsl:value-of select="."/>
  <xsl:text>&#xa;</xsl:text>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="DepartmentName">
  <xsl:text>&#xa;department id: </xsl:text>
  <xsl:value-of select="@departmentId"/>
  <xsl:text>&#xa;</xsl:text>
  <xsl:text>&#xa;department name: </xsl:text>
  <xsl:value-of select="."/>
  <xsl:text>&#xa;</xsl:text>
  <xsl:apply-templates/>
</xsl:template>

以及更多相同的内容。

您当然可以从Java(或从命令行或从Ant等)运行XSLT代码。 JDK内置了XSLT 1.0处理器,或者您可以下载Saxon以获得XSLT 2.0处理器。这个简单的例子只使用XSLT 1.0,但你很快就会发现自己需要XSLT 2.0的功能,所以你不妨从那开始。