2013-06-25 1 views
1

Попытка выяснить правильный подход к извлечению контента из сложного XML. Используя ключевые слова, я пытаюсь идентифицировать и извлекать с помощью Xpath. Мне нужно извлечь 50+ атрибутов XML, сгенерированных из документа PDF. (Сохранено как XML) Теперь, мне интересно, правильно ли это ?.Извлечение значений из XML - Xpath или прямой анализ?

Должен ли я разбирать XML, используя парсер DOM, возможно, а затем извлечь все, что мне нужно? Есть предположения?

+0

Возможно, да, возможно, нет. Вы должны начать принимать некоторые ответы на свои предыдущие вопросы. –

+0

Спасибо. Мне тоже было интересно узнать о предыдущих вопросах. Как я могу «принять» ответ? Не видел ссылку, чтобы принять или закрыть вопросы. – BRZ

+0

Просто нажмите на галочку. –

ответ

0

Во-первых, не используйте DOM. Предполагая, что вы находитесь в мире Java (вы на самом деле не говорите), используйте одну из более современных древовидных моделей, таких как XOM или JDOM2. С ними гораздо проще работать, особенно при использовании пространств имен, они быстрее, и они поддерживают все необходимые функции. Люди используют DOM, потому что они не понимают, что есть что-то лучше.

Во-вторых, использование древовидной модели и использование XPath не являются взаимоисключающими. Я довольно часто создаю дерево, а затем сделаю смесь навигации XPath и прямой навигации: например, найдите элемент с помощью XPath, затем получите доступ к его атрибутам, используя прямую навигацию. XPath упрощает передачу более сложных путей доступа, а полученный код более удобен в обслуживании, но я бы не использовал XPath только для того, чтобы перейти от элемента к одному из его атрибутов.

Какой бы подход вы ни применяли (DOM, SAX, XPath, привязка данных), получение данных из XML в Java является проблемой. Если вы можете избежать этого, написав все приложение на XML-языке, таком как XSLT или XQuery, тогда выполните.

0

«правый» как? «правильно» для кого? Как кодер? Как производительность? Какое «право» вы ищете?

Скорее всего, XPath будет самым элегантным:

thing = getPathThing(doc, "/path/to/element"); 
<repeat 50 times> 

Это, вероятно, будет медленным. Это просто нужно делать больше всего.

Метод DOM, возможно, будет немного быстрее. Оба идут по DOM, чтобы найти их элементы. Я уверен, что разница измерима, я не уверен, что это заметно, а не если все выражения XPath предварительно скомпилированы. Оба требуют, чтобы весь документ находился в памяти.

Самый быстрый способ запускает некоторый потоковый синтаксический анализатор (т. Е. SAX), поскольку вы можете захватывать элементы во время их пролета. Однако анализаторы SAX, как правило, ужасно смотрят. У нас есть другие механизмы по какой-то причине, SAX не особенно элегантен. Но это быстро, а память дешевая. Его стоимость памяти зависит от данных, которые вы храните, а не от общих данных полезной нагрузки XML.

Если вы можете «позволить себе это», XPath, скорее всего, будет лучшим выбором из POV, поддерживающего код, иначе я бы спустился и пошел SAX.

+0

Спасибо за ваш ответ. Да, осознайте, что «правильно» субъективно. Мне просто интересно, подходит ли Xpath, если все, что я делаю, это простой поиск и извлечение. В моем случае скорость обработки - это не проблема, а точность. Достаточно уверен, что Xpath является правильным подходом к моему требованию, но хотел убедиться, что это приемлемый способ. – BRZ