2014-01-07 2 views
2

Использование SAX и Java, я хочу, чтобы разобрать строку XML, но получить это исключениеSax синтаксического анализа исключение, когда XML имеет XSI: атрибут типа

[Fatal Error]: 1: 92: Приставка "XSI" для атрибута «XSI : type ", связанный с элементом типа" device ", не связан.

try { 
     SAXParserFactory factory = SAXParserFactory.newInstance(); 
     factory.setNamespaceAware(false); 
     factory.setValidating(false); 

     SAXParser parser = factory.newSAXParser(); 
     XMLReader xmlReader = parser.getXMLReader(); 
     handler = new ConfigHandler(); 

     xmlReader = XMLReaderFactory.createXMLReader(); 
     // assign our handler 
     xmlReader.setContentHandler(handler); 
     // perform the synchronous parse 
     xmlReader.parse(new InputSource(new StringReader(xml))); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Вот XML

<device xsi:type="axl:XIPPhone" ctiid="182" uuid="{20a9f66a-fb1f-6981-5851-1474258054dc}"> 
<fullConfig>true</fullConfig> 
<portalDefaultServer>serveraxd.lestry.com</portalDefaultServer> 
<deviceProtocol>SOORTY</deviceProtocol> 
.. 
.. 
</device> 

Я не в состоянии изменить содержание XML в этом случае.

+0

Что вы хотите сказать? Если вы разместили весь XML-документ (а не только фрагмент), сообщение об ошибке объясняет проблему. Префикс пространства имен «xsi» не привязан к фактическому URI пространства имен. – jarnbjo

+0

Вопрос в том, что я могу сделать, чтобы исключить это исключение и разрешить синтаксический анализ файла XML. – mrmannione

ответ

3

Как указано в сообщении об ошибке, вы не указали объявление пространства имен для префикса xsi:. Добавить

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

вашему верхнего уровня элемента (<device> элемент).

+0

Есть ли способ разбора без добавления этого. Я не контролирую XML-файл? – mrmannione

+1

Не так, как он стоит с современным парсером XML, нет. Возможно, вам удастся найти древний XML-парсер пред-пространств имен, но я действительно не рекомендую его. Ваша альтернатива заключается в том, чтобы выполнять обработку без XML для проверки и вставки объявления пространства имен. Или вы можете обернуть входящие документы в дополнительный XML, который несет это объявление, но вы не можете сделать это за каждую ошибку, которую они могут сделать. Говоря как профессионал, я бы отскакивал документ до его источника, с сообщением об ошибке; им нужно исправить это как для себя, так и для себя. – keshlam

+0

Это полезно знать, я вставляю объявление пространства имен в строку перед обработкой. Сервер, о котором идет речь здесь, очень широко развернут, и заставить их двигаться дальше, это будет почти невозможно в ближайшем будущем. Еще раз спасибо. – mrmannione

Смежные вопросы