Ошибка синтаксического анализа XML-документа с несколькими тегами - PullRequest
0 голосов
/ 06 февраля 2019

Мой XML выглядит следующим образом:

<uc-export clientvers="8.00"> <JOBP AllowExternal="1" client="5000" name="DEV_1234" system="DEV">
 </JOBP></uc-export>
<uc-export clientvers="8.00"> <JOBP AllowExternal="1" client="5000" name="DEV_435" system="DEV">
 </JOBP></uc-export>
<uc-export clientvers="10.0.8+build.472"> <JOBS_UNIX AttrType="UNIX" client="5000" name="TEST_JOB123" system="DEV"><node content="1" id="VALUE" name="Variables" parent="" type="VALUE">

Мне нужно извлечь тег из XML, будь то объект JOBS_UNIX или JOBP

Яиспользуя DocumentBuilderFatory

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
File file = new File(path);
Document document = db.parse(file);
document.getDocumentElement().normalize();
list = document.getElementsByTagName("*");
Element element = (Element) list.item(1);
jobProps = element.getAttributeNode("name").getValue();

Я могу проанализировать документы, если они имеют 1 элемент, но не работает несколько тегов

1 Ответ

0 голосов
/ 06 февраля 2019

Ваш файл - это правильно сформированная внешняя общая проанализированная сущность (часто для краткости называемая фрагментом XML), но это не правильно сформированная сущность документа, поэтому ее невозможно проанализировать обычным способом.Самый простой способ разобрать его - это добавить <dummy> и добавить </dummy> - но это работает, только если вы уверены, что в файле не будет декларации XML или спецификации.Более безопасный (и, возможно, более эффективный) способ - создать XML-документ, который ссылается на этот документ, используя ссылку на сущность, а затем проанализировать ссылочный документ.Это будет выглядеть примерно так:

<!DOCTYPE dummy [
<!ENTITY e SYSTEM "fragment.xml">
]>
<dummy>&e;</dummy>
...