Доступ к символьным данным в XML с помощью таблицы стилей (XSLT) - PullRequest
1 голос
/ 02 января 2012

У меня есть XML-файл, который содержит некоторый HTML-код в элементе. Элементы html, однако, экранированы, либо объявлены как CDATA, либо с сущностями для «<» и «>».

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

Буду очень признателен за вашу помощь, так как я довольно долго занимаюсь этой проблемой. Заранее большое спасибо!

<?xml version="1.0"?>
<Master>
 <Content>
  <SomeHTML> &lt; img src="./world.jpg" &gt;  
             <!-- This is one out of many other html elements I want to access -->
  </SomeHTML>
 </Content
</Master>

Ответы [ 3 ]

1 голос
/ 02 января 2012

Нет, это невозможно в чистом XSLT, потому что символьные данные - это обычный текст, а не html, поэтому вы можете обрабатывать его как обычный текст с помощью строковых функций (например, подстроки). Вы должны использовать расширение с парсером HTML. Это зависит от процессора.

HTML должен храниться в файле XML как теги в первую очередь (но, конечно, как XHTML, поэтому тег <img> должен быть закрыт или использоваться как пустой <img/>).

1 голос
/ 02 января 2012

Какой процессор XSLT вы используете?Например, в Saxon 9 вы можете использовать такую ​​функцию расширения, как http://www.saxonica.com/documentation/extensions/functions/parse-html.xml.

1 голос
/ 02 января 2012

Вы можете использовать функцию расширения, чтобы анализировать текст внутри <SomeHTML>, передавать его в шаблоны (возможно, в другом режиме) и, наконец, использовать <xsl:value-of disable-output-escaping="true"/> для вывода.

Функция расширения должна, конечно, поддерживаться вашим анализатором, что означает, что вы ограничены либо вашим анализатором, либо вашей средой, которая может не разрешить установку и / или использование таких функций расширения по различным причинам:

  • Функция расширения для стандартной инфраструктуры Java XSLT приведена в http://docs.oracle.com/cd/B10464_05/web.904/b12099/adx04xsl.htm#1008934

  • Saxon имеет saxon: parse (string) , но согласно документации это ограничено правильно сформированным XML - насколько я могу видеть из вашего примера, у вас нет что.

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