2011-09-14 100 views
-1

在Java中使用SAX解析器,如何进行基于属性的解析。java中的XML解析

假设我的XML文件如下,

<?xml version="1.0" encoding="UTF-8"?> 
<employees category="1" type="regular" location="india"> 
    <employee name="xyz" doj="20/12/2001" dob="21/12/1988" salary="12000"></employee> 
    <employee name="xyz" doj="22/12/2003" dob="22/12/1988" salary="18000"></employee> 
    <employee name="xyz" doj="23/12/2002" dob="23/12/1988" salary="15000"></employee> 
    <employee name="xyz" doj="24/12/2003" dob="22/12/1988" salary="17000"></employee> 
    <employee name="xyz" doj="26/12/2005" dob="24/12/1988" salary="12000"></employee> 

</employees> 

我想获取每个属性员工元素的值。请帮助我

+11

您提供什么是无益的。也显示你的解析代码没有意义吗? –

+1

他也错过了一个问题。我找不到问号... – WarrenFaith

+0

我编辑了这个问题。请帮我在这 – Som

回答

4

DefaultHandler类提供了一个回调来监听起始元素,并且它有一个包含Attributes对象的签名,表示该元素的属性。

startElement(String uri, String localName, String qName, Attributes attributes)

望着Attributes界面,我看到的方法来帮助你。

  1. 如果你不知道哪个属性,你有兴趣,你想看看所有属性,你应该使用getLength(),并且做了for-loop在该长度上,看着每个属性getLocalName(int)getQName(int),您可以致电getValue(int)(所有int都用作索引到属性列表中)来查找它的值。
  2. 如果您确实知道您感兴趣的属性,则可以简单地致电getValue(String),传递您之后属性的字符串名称。

下面是一些示例代码,可以让你在给定元素的所有属性的名称和值:

public void startElement(String ns, String localName, String qName, Attributes attrs) throws SAXException { 
    for(int i = 0; i < attrs.getLength(); ++i) { 
     String attrName = attrs.getLocalName(i); 
     String attrValue = attrs.getValue(i); 

     //do stuff with name/value 
    } 
} 
1

如果您不习惯它,SAX编程会非常混乱。构造解析器有点棘手,因为你必须为抽象接口API而努力。一旦你完成所有工作并注册你的处理程序,访问属性应该很简单;您的处理程序类需要实现该方法:

public void startElement(String nsUri, String localName, String qName, Attributes attributes) 
     throws SAXException    

属性值在该名称的arg中可用。