Я хочу проанализировать XML-документ с помощью SAX Parser. Когда документ не содержит пространства имен, он отлично работает. Однако, когда я добавляю пространства имен в корневой элемент, я сталкиваюсь с исключением NullPointerException.Java SAX Parser Namespace Throws NullPointerException
Вот мой рабочий XML документ:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Date>01102013</Date>
<ID>1</ID>
<Count>3</Count>
<Items>
<Item>
<Date>01102013</Date>
<Amount>100</Amount>
</Item>
<Item>
<Date>02102013</Date>
<Amount>200</Amount>
</Item>
</Items>
</Root>
Это проблематично версия:
<?xml version="1.0" encoding="utf-8"?>
<Root xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.xyz.com/q">
<Date>01102013</Date>
<ID>1</ID>
<Count>3</Count>
<Items>
<Item>
<Date>01102013</Date>
<Amount>100</Amount>
</Item>
<Item>
<Date>02102013</Date>
<Amount>200</Amount>
</Item>
</Items>
</Root>
Вот мой код:
Document doc = null;
SAXBuilder sax = new SAXBuilder();
sax.setFeature("http://xml.org/sax/features/external-general-entities", false);
// I set this as true but still nothing changes
sax.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
sax.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
doc = sax.build(xmlFile); // xmlFile is a File object which is a function parameter
Root root = new Root();
Element element = doc.getRootElement();
root.setDate(element.getChild("Date").getValue());
root.setID(element.getChild("ID").getValue());
.
.
.
Когда я использую первый XML, он работает нормально. Когда я использую второй XML
element.getChild("Date").getValue()
возвращает null.
Примечание: я могу читать «http://www.xyz.com/q» часть с помощью
doc.getRootElement().getNamespaceURI();
, который означает, что я все еще могу получить доступ к корневому элементу.
У кого-нибудь есть идея, как это преодолеть?
Заранее спасибо.
Я поместил это так, и она работала: element.getChild («Дата», документ .getNamespace()). getValue() Спасибо за ответ! –