Как проверить, существует ли атрибут 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 ответа

Решение

Вы можете проверить, существует ли атрибут, используя getIndex(name) или getIndex (uri, localName). Если он возвращает -1, то атрибут не существует. Смотрите getIndex Javadoc.

Мой ответ основан на ответе от Javanator с использованием SAX Parser.

Вы можете проверить, является ли атрибут пустым:

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

public boolean isEmpty ()

Возвращает:true, если length() равно 0, иначе false

Альтернативный способ узнать, существует ли определенный атрибут:

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

логическое значение hasAttribute (имя строки)

Возвращает значение true, если для данного элемента указан атрибут с заданным именем или значение по умолчанию, в противном случае - значение false.

Эта ссылка является хорошим примером SAXParser

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

В делегате startElement мы обычно читаем атрибуты (org.xml.sax.Attributes)

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

Во-первых, вы также можете искать

attributes.getLength() 

метод, чтобы убедиться, что вы получаете желаемое количество атрибутов в ленте или нет

Что было бы действительно предпочтительнее, так это то, что вам не следует беспокоиться об этом и писать код, как будто вы получите все.

Если

 attributes.getValue("blahblah"); 

дает ноль. это означает, что это не там.

И вы заполняете нуль непосредственно в ваших объектах данных и принимаете меры предосторожности при их использовании в самом коде. (проверка нуля и т. д.)

Надеюсь, поможет:)

Другие вопросы по тегам