Java 如何在XML中检索名称空间

Java 如何在XML中检索名称空间,java,xml,Java,Xml,我使用javax.xml.stream.XMLInputFactory解析xml文件,但解析名称空间时遇到问题 在XML的第一行中定义了一个名称空间 <iati-activities xmlns:akvo="http://akvo.org/iati-activities" version="2.01" generated-datetime="2016-03-29T07:18:39Z"> 如果取消对theReader.getNamespacePrefix()行的注释,则会出现空指针异

我使用javax.xml.stream.XMLInputFactory解析xml文件,但解析名称空间时遇到问题

在XML的第一行中定义了一个名称空间

<iati-activities xmlns:akvo="http://akvo.org/iati-activities" version="2.01" generated-datetime="2016-03-29T07:18:39Z">
如果取消对theReader.getNamespacePrefix()行的注释,则会出现空指针异常

XML文件的其余部分解析得很好,但我需要知道某个部分的名称空间前缀


你知道我做错了什么吗?

这可能是一个副本,我会检查答案的。谢谢。虽然不完全一样,但它帮助我找到了解决办法。谢谢,如果不是一样的话,给这个问题添加一个答案,让其他有同样问题的人看到可能是个好主意:)我很想,但解决办法只是用一种完全不同的方式来解决这个问题。当我得知XMLInputFactory不提供此功能时,我开始从另一个方向寻找答案。我确实知道文件来自哪里,因此我确实知道名称空间是否存在。这是一个低于标准的解决方案,但是XML解析器只在迁移期间使用,所以它就足够了。
int theType = theReader.next();
switch (theType) {
    case XMLStreamConstants.START_ELEMENT:
        String theLocalName = theReader.getLocalName();
        if (theLocalName.equalsIgnoreCase(IatiLabel.IATIACTIVITIES.getLabel())) {
            for (int i = 0; i < theReader.getAttributeCount(); i++) {
                System.out.println("Localname: " + theReader.getAttributeLocalName(i));
                System.out.println("Namespace: " + i + " = " + theReader.getAttributeNamespace(i));
                System.out.println("Attr value: " + theReader.getAttributeValue(i));
//              System.out.println("Prefix: " + theReader.getNamespacePrefix(i));
                System.out.println("URI: " + theReader.getNamespaceURI(i));
            }

            System.out.println("URI 2: " + theReader.getPrefix());
    }
}
Localname: version
Namespace: 0 = null
Attr value: 2.01
URI: http://akvo.org/iati-activities
Localname: generated-datetime
Namespace: 1 = null
Attr value: 2016-03-29T07:18:39Z
URI: null
URI 2: