2012-01-25 4 views
1

Я могу использовать xmllint и обрабатывать вход HTML/XHTML с XPath 1.0. Например:Возможно ли обработать XHTML с саксоном?

xmllint --xpath "//title" --html http://www.w3.org/TR/xslt20/ 2>/dev/null

выходов ожидается, но с Saxon:

java -cp /usr/share/java/saxon9he.jar net.sf.saxon.Query -s:"http://www.w3.org/TR/xslt20/" -qs:"//title"

никаких результатов.
Если набегать соединение HTTP документа сбрасывается через 2 мин, а на локальном документе он выходит без результата после пары минут о обработке

В Saxon documentation я не могу найти ничего, связанные с обработкой XHTML документов


Я нашел этот вопрос: Saxon Xpath namespace и я обновляя вопрос с дополнительной информацией:

Вот xmllint примера без использования HTML-анализатора (не --html переключателя):

xmllint --xpath "//*[local-name()='title'][namespace-uri()='http://www.w3.org/1999/xhtml']" http://www.w3.org/TR/xslt20/

, который выводит:

<title>XSL Transformations (XSLT) Version 2.0</title> 

Снова используя Saxon:

java -cp /usr/share/java/saxon9he.jar net.sf.saxon.Query -s:"http://www.w3.org/TR/xslt20/" -qs:"//*[local-name()='title'][namespace-uri()='http://www.w3.org/1999/xhtml']" 

Нет результатов

+0

Несомненно, это возможно, если это хорошо сформированный XML (т. Е. На самом деле действительный XHTML). Одна заметка: элементы XHTML находятся в пространстве имен ('http: // www.w3.org/1999/xhtml'). Убедитесь, что вы указали пространство имен. –

+0

'http: // www.w3.org/TR/xslt20 /' * является * исходным документом XHTML. Он проходит тестовый XML-тест HTML, и он сгенерирован с ним, так как его можно легко проверить. – theta

+0

Я думаю, вы пропустили то, что я вставил. Это не та же строка: 'http: // www.w3.org/1999/xhtml'. Вы никогда не будете сопоставлять что-либо с '// title', потому что оно не учитывает пространство имен. –

ответ

0

XHTML документ представляет собой XML-документ, так что вы можете обработать его в так же, как и любой другой документ XML. Обратите внимание, что если это XHTML, большинство элементов, вероятно, будут находиться в пространстве имен, и вам нужно учитывать это. Установка пространства имен XHTML в качестве пространства имен по умолчанию может оказаться полезным (хотя, к сожалению, в XQuery это также делает пространство имен по умолчанию для вывода - XSLT делает это лучше).

Общеизвестно, что документы XHTML содержат ссылку на DTD XHTML на сервере W3C, и за последний год W3C перестали отвечать на запросы на получение этого ресурса, потому что они не могут обрабатывать нагрузку. Это означает, что вы можете столкнуться с большими задержками и ошибками ввода-вывода. В ответ на это Saxon 9.4 включает локальную копию DTH XHTML и удовлетворяет запросам от ее локальной копии. С более ранними выпусками вы можете добиться такого же эффекта, используя каталоги OASIS.

+0

Спасибо за ваш вклад, Майкл. Я попытаюсь расшифровать значение локальной копии XDTML DTD;) Мне любопытно, почему вы можете прокомментировать, почему так мало времени для Saxon обрабатывать запрос (например, в запросе с комментариями DevNull) на локальную копию XHTML http: // www .w3.org/TR/xslt20, например. У меня мало опыта, но в противном случае Saxon не кажется медленным, от того, что я пытался до сих пор. – theta

+0

Как я уже говорил, если есть чрезмерная задержка, потому что парсер XML просит W3C обслуживать DTD, а W3C isn ' t обслуживает его. Саксон сидит там, ожидая, точно так же, как вы ... –

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