Не удается найти атрибуты с использованием StAX - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть простой XML-файл:

`<?xml: version = "1.0" ?>
<Company>
    <Employee category = "technical">
        <FirstName>John</FirstName>
        <LastName>Doe</LastName>
        <ContactNo>123456789</ContactNo>
    </Employee>
    <Employee category = "non-technical">
        <FirstName>Jane</FirstName>
        <LastName>Doe</LastName>
        <ContactNo>1234567898</ContactNo>
    </Employee>
</Company>`

Теперь мне нужно проанализировать XML с помощью StAX, но я не могу получить атрибуты.Мой код:

 `public static void main(String[] args) throws XMLStreamException, FileNotFoundException {
    XMLInputFactory xmlif = XMLInputFactory.newFactory();
    Reader reader = new FileReader("Company.txt");
    XMLStreamReader xmlsr = xmlif.createXMLStreamReader(reader);
    while (xmlsr.hasNext()) {
        switch (xmlsr.next()) {
            case XMLStreamReader.START_ELEMENT:
                System.out.println("START_ELEMENT");
                System.out.println("Qname:" + xmlsr.getName());
                break;
            case XMLStreamReader.END_ELEMENT:
                System.out.println("END_ELEMENT");
                System.out.println("Qname:" + xmlsr.getName());
        }

    }
}`

Когда я начинаю читать элемент, я должен проверить, есть ли в нем атрибут, используя простую функцию IF.если у него есть атрибут, я буду использовать:

 for (int i = 0; i < xmlsr.getAttributeCount(); i++) {
String attributeName = xmlsr.getAttributeLocalName(i);
String attributeValue = xmlsr.getAttributeValue(i);
System.out.println("Attribute value for " + attributeName + " = " + attributeValue);
}

Но я не знаю, куда именно поместить функцию IF и как ее проверить.Пожалуйста, кто-нибудь может вставить код функции IF.Спасибо ...

1 Ответ

0 голосов
/ 05 июля 2019

Прошло много времени, поэтому я надеюсь, что вы получили ответ самостоятельно: D

Но в случае, если вы этого не сделали, атрибуты сохраняются в START_ELEMENT.Это означает, что правильное место для добавления вашего кода печати атрибута находится в case XMLStreamReader.START_ELEMENT, как вы можете видеть ниже.

public static void main(String[] args) throws XMLStreamException, FileNotFoundException {
        XMLInputFactory xmlif = XMLInputFactory.newFactory();
        Reader reader = new FileReader("Company.txt");
        XMLStreamReader xmlsr = xmlif.createXMLStreamReader(reader);
        while (xmlsr.hasNext()) {
            switch (xmlsr.next()) {
                case XMLStreamReader.START_ELEMENT:
                    System.out.println("START_ELEMENT");
                    System.out.println("Qname:" + xmlsr.getName());

                    int numberOfAttributes = xmlsr.getAttributeCount();
                    if (numberOfAttributes > 0) {
                        for (int i = 0; i < numberOfAttributes; i++) {
                            String attributeName = xmlsr.getAttributeLocalName(i);
                            String attributeValue = xmlsr.getAttributeValue(i);
                            System.out.println("Attribute value for " + attributeName + " = " + attributeValue);
                        }
                    }

                    break;
                case XMLStreamReader.END_ELEMENT:
                    System.out.println("END_ELEMENT");
                    System.out.println("Qname:" + xmlsr.getName());
                    break;
            }

        }
    }
...