【问题标题】:Can't find attributes using StAX使用 StAX 找不到属性
【发布时间】:2018-12-15 18:29:14
【问题描述】:

我有一个简单的 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>`

现在,我必须使用 StAX 解析 XML,但我无法获取属性。 我的代码是:

 `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 函数的代码。 谢谢...

【问题讨论】:

    标签: attributes stax


    【解决方案1】:

    已经有一段时间了,所以我希望你自己得到答案: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;
                }
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-02
      • 2013-11-15
      • 1970-01-01
      • 2019-09-23
      • 2011-09-26
      • 1970-01-01
      • 2018-05-06
      • 2021-05-19
      相关资源
      最近更新 更多