XSLT: проанализировать строку как набор узлов XML (конкретное: преобразовать строку HTML в набор узлов)? - PullRequest
0 голосов
/ 03 января 2012

Я столкнулся с проблемой, связанной с тем, что в XML есть узел со строкой, представляющей HTML. Мне нужно вырезать эту строку, но, конечно, это может привести к неправильной HTML-разметке (например, если я обрежу строку всегда после 30 символов, я могу легко потерять закрывающие элементы, такие как </ul> и т. Д.). Что делать? Кажется, это очень сложно, потому что я не нахожу реальной помощи через Google.

Моя идея на данный момент: с помощью анализа-строки и регулярных выражений выберите узлы и содержимое и запишите их как XML-элемент-узлы. Но у меня большие проблемы со всеми делами, особенно с вложенными узлами.

У кого-нибудь есть идеи?

К вашему сведению: мой блокнот:

  1. Regex: поймать первый тег
  2. Чтение тэга первого узла
  3. Поместите тэг в регулярное выражение и найдите весь тэг, выберите также оставшуюся часть строки (чтобы продолжить с ней позже)
  4. Проверить содержимое: дополнительные теги? да: -> Шаг 1, нет: -> Шаг 5
  5. Написать тег как нод-элемент
  6. Возьми остаток строки -> Шаг 1

Вот XML-документ:

<?xml version="1.0" encoding="UTF-8"?>
<html>
    <data>
        <![CDATA[
        <h2>header</h2><p>A little article. <b>Here</b> it's already done!</p>
        ]]>
    </data>
</html>

Что я хочу сделать:

У меня есть строка (html), и я просто хочу вывести специальное количество символов (например, первые 25). Когда я делаю это только на строке, я получаю такой результат:

"<h2>header</h2><p>A little article"

На следующем шаге я помещаю эту строку в HTML-вывод, но в этот момент я получаю недопустимую разметку, потому что <p> -Tag не закрыт.

Итак, мой первый подход: синтаксический анализ этой строки для получения XML-узлов для каждого тега, а затем просмотр каждого узла, запись xml-элемента (чтобы убедиться, что последний тег будет действительным) и копирование как можно большего количества символов до достижения предел в этом примере будет 25 символов.

Ответы [ 2 ]

0 голосов
/ 03 января 2012

Когда вы упоминаете анализ-строку, вы, похоже, используете XSLT 2.0. Таким образом, у вас есть два варианта: в Saxon 9 есть функция расширения http://www.saxonica.com/documentation/extensions/functions/parse.xml (и даже одна http://www.saxonica.com/documentation/extensions/functions/parse-html.xml на случай, если вы хотите проанализировать HTML), а затем есть реализация XSLT 2.0, разработанная Дэвидом Карлайлом. HTML-парсера http://code.google.com/p/web-xslt/source/browse/trunk/htmlparse, который вы можете импортировать в таблицу стилей и затем использовать для содержимого вашего элемента данных.

0 голосов
/ 03 января 2012

Если у вас есть узел XML, представляющий HTML, то он должен был быть закодирован сущностью, то есть открывать и закрывать фигурные скобки, преобразованные в &lt; и &gt; - это означает, что вы можете вырезать его где угодно и иметь действительныйXML-документ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...