如何使用SAX解析器检查XML属性是否存在?

时间:2012-09-30 12:28:37

标签: java android xml sax

我提供了一个XML文件,一个标签包含多个属性。但是其中一个有时会被跳过。 Exampe:

<data>
    <item attribute0="value 0" attribute1="value 1" attribute2="value 2">
    <item attribute0="value 0" attribute1="value 1">
    <item attribute0="value 0" attribute1="value 1" attribute2="value 2">
</data>

我正在使用SAX解析器处理此文件,并且在startElement方法中我获取了所有属性的值但在获取attribute2之前我需要检查它是否存在。

3 个答案:

答案 0 :(得分:1)

您可以使用 getIndex(name) getIndex(uri,localName)来检查属性是否存在。如果返回-1,则该属性不存在。请参阅getIndex javadoc

答案 1 :(得分:1)

我的回答建立在Javanator使用SAX Parser的答案上。

您可以通过以下方式检查属性是否为空:

if (item.getAttribute("attribute2").isEmpty()) { }
  

public boolean isEmpty()

     

返回:如果length()则返回true   是0,否则为假

询问特定属性是否存在的另一种方法是:

if (item.hasAttribute("attribute2")) { }
  

boolean hasAttribute(String name)

     

在此处指定具有给定名称的属性时,返回true   element或者有一个默认值,否则为false。

答案 2 :(得分:0)

此链接是SAXParser的一个很好的例子

http://java-samples.com/showtutorial.php?tutorialid=152

在startElement委托中,我们通常会去读取Attributes(org.xml.sax.Attributes)

//Event Handlers
public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
 // Read Attributes Here    
}

首先,你也可以寻找

attributes.getLength() 

确保你得到的方法 您在Feed中所需的属性数量

真正可取的是你不应该担心这些和代码,好像你会得到所有。

如果

 attributes.getValue("blahblah"); 

给出null。这意味着它不存在。

并且将null直接填充到数据对象中,并在代码本身中使用它们时采取预防措施。 (空检查等)

希望有所帮助:)