У меня есть этот XML-файл, который не имеет корневого узла. Кроме ручного добавления "поддельного" корневого элемента, там какой-либо способ, которым я смог бы проанализировать XML-файл в Java?Спасибо.
Я полагаю, вы могли бы создать новую реализацию InputStream, которая обертывает ту, из которой вы будете анализировать. Эта реализация вернет байты открывающего корневого тега перед байтами из обернутого потока и байты закрывающего корневого тега впоследствии. Это было бы довольно просто сделать.
Я тоже могу столкнуться с этой проблемой. Устаревший код, а?
Ян.
Изменить: вы также можете посмотреть java.io.SequenceInputStream, который позволяет вам добавлять потоки друг к другу. Вам нужно будет поместить свой префикс и суффикс в байтовые массивы и обернуть их в ByteArrayInputStreams, но все это довольно просто.
Ваш XML-документ требует, чтобы корневой элемент xml считался правильно сформированным . Без этого вы не сможете проанализировать его с помощью парсера xml.
Один из способов - предоставить собственную фиктивную обертку, не трогая исходный 'xml' (не очень хорошо сформированный 'xml') Нужны слова для этого:
Синтаксис
<!DOCTYPE some_root_elem SYSTEM "/home/ego/some.dtd"
[
<!ENTITY entity-name "Some value to be inserted at the entity">
]
Пример:
<!DOCTYPE dummy [
<!ENTITY data SYSTEM "http://wherever-my-data-is">
]>
<dummy>
&data;
</dummy>
Я думаю, что даже если какой-либо API будет иметь опцию для этого, он вернет вам только первый узел "XML", который будет выглядеть как корень, и отбросит остальные.
Так что ответ, вероятно, заключается в том, чтобы сделать это самому. Scanner или StringTokenizer могут справиться с этой задачей.
Возможно, некоторые html парсеры могут помочь, они обычно менее строгие.