Использовать XSLT для чтения из одного источника HTML и создания новой страницы HTML? - PullRequest
1 голос
/ 20 июня 2011

Я пытаюсь научиться использовать XSLT для чтения из одного источника HTML и создания новой страницы HTML.Я знаю кое-что об использовании XSLT для чтения из файла XML и создания новой HTML-страницы, но другой способ для меня новый, и я не могу найти никаких полезных руководств по этому вопросу.

Мне нужны некоторые базовые знания об этом, чтобы начать, но я не знаю, как думать и использовать XSLT, например, для выбора элементов div и их содержимого из исходного HTML и создания нового HTML.и, возможно, создайте новую страницу без тега head и т. д.

Требуется некоторая базовая помощь или хорошие ссылки на эту тему.Спасибо!:)

Привет еще раз!Это моя задача и проблема, для решения которой мне нужна помощь, если это возможно ?!У меня есть один документ XHTML, который использует таблицу стилей CSS.Давайте назовем документ XHTML для «B».Я хочу создать новый документ XHTML, назовем его «A» и использовать некоторые элементы из «B» для «A» с новой таблицей стилей CSS.Это как если бы кто-то нажал на «Б», вместо этого он пришел бы к «А».Хм, а я не знаю с чего начать и не знаю, возможно ли это?Как добавить таблицу стилей CSS в код XSLT?Может быть, никто не понимает, о чем я говорю, но не стесняйтесь спрашивать.Точная помощь, которую я могу получить, чтобы решить эту задачу!Заранее спасибо!:)

Ответы [ 2 ]

0 голосов
/ 20 июня 2011

При преобразовании из XHTML в (X) HTML с точки зрения процессора вы можете сначала избежать внешнего разрешения фазы синтаксического анализа, вызванного типом документа, поскольку это может быть источником ошибок времени выполнения.

В таком случае вы должны увидеть, поддерживает ли ваш процессор какие-либо опции, чтобы отключить это, или вам может потребоваться удалить объявление doctype непосредственно из входного документа.

Например, в msxsl Вы можете использовать опции xe для отключения разрешения внешнего типа документа:

> msxsl test_i.xml test_t.xsl -o test_o.xml -xe

С точки зрения XSLT 1.0 ваш xhtml - это просто XMLдокумент с определенным пространством имен.Например:

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title></title>
    </head>
    <body>
        <p>Foo</p>
    </body>
</html>

Чтобы иметь возможность преобразовать это в другой документ XHTML, ваш XSLT должен:

  • объявить правильное пространство имен по умолчанию и префикс
  • объявитьправильный вывод и тип документа

Вы получите доступ к элементам во входном документе, используя определенный префикс.Например, для этого преобразования просто добавьте заголовок во входной документ:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:x="http://www.w3.org/1999/xhtml"
    exclude-result-prefixes="x">

    <xsl:output method="html" indent="yes" 
        doctype-public="-//W3C//DTD XHTML 1.1//EN" 
        doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"/>

    <xsl:strip-space elements="*"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="x:body">
        <xsl:copy>
            <h1>Foo Title</h1>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

Примечание:

  • объявление префикса пространства имен xmlns:x="http://www.w3.org/1999/xhtml" позволяет вам правильно выбирать элементы ввходной документ, квалифицированный в пространстве имен xhtml.
  • объявление пространства имен по умолчанию xmlns="http://www.w3.org/1999/html" предотвращает создание нежелательных пустых пространств имен xmlns="" в выходном документе.
  • использование exclude-result-prefixesпозволяет исключить объявление пространства имен xhtml в элементах выходного документа, явно объявленных в XSLT.

С точки зрения XSLT 2.0 , это действительноочень простоВы можете объявить пространство имен XPath по умолчанию, таким образом избавляясь от префиксов.Объявление таблицы стилей будет:

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/1999/xhtml"
    xpath-default-namespace="http://www.w3.org/1999/xhtml">
0 голосов
/ 20 июня 2011

добро пожаловать в Stackoverflow!

Вы можете войти в одну из двух ситуаций:

  • Ваш HTML-файл на самом деле является файлом XHTML - в этом случае ничего не изменится!HTML - это просто определенный тип XML, и вы можете использовать все обычные методы для его обработки.С точки зрения XSLT нет ничего особенного в вводе HTML: изучите XSLT, и вы можете применить его к HTML очень хорошо (конечно, не стесняйтесь задавать здесь конкретные вопросы!)не может быть проанализирован парсером xml.В этом случае вам необходимо преобразовать синтаксис в XML или использовать синтаксический анализатор, представляющий HTML как дерево XML.HTML Tidy может конвертировать HTML в XHTML (и его существует много разновидностей), и, например, HTML Agility Pack может анализировать HTML и представлять его как XML (обратите внимание, что HTML-пакет Agility не поддерживает пространства имен xml, поэтому если у вас есть какой-либо изте, что в вашем входе, вам нужно сначала удалить их).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...