XML в XHTML с XSL - PullRequest
       2

XML в XHTML с XSL

0 голосов
/ 18 октября 2018

У меня есть два XML-файла, содержащие два словаря с 10 словами на двух разных языках (одни и те же слова).Теперь я хочу использовать XSL для связи этих двух XML-файлов и преобразования их в XHTML.

То, как я это делаю сейчас, похоже, дает мне вывод HTML.Что мне делать, мне нужно преобразовать HTML в XHTML или это способ преобразовать его в XHTML напрямую?

Вот как выглядит один из моих XML-словаря XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="dict.css"?> 
<Dictionary xmlns="https://translate.google.se/m/translate?hl=sv/german">
    <Language>Swedish</Language>
    <Content>
        <Titel>Svensk ordlista</Titel>
        <Author>
            <Name> Translator </Name>
        </Author>
        <Words wordNum ="10">
            <Word ID="0">Vatten</Word>
            <Word ID="1">Häst</Word>
            <Word ID="2">Bil</Word>
            <Word ID="3">Katt</Word>
            <Word ID="4">Hund</Word>
            <Word ID="5">Snö</Word>
            <Word ID="6">Gata</Word>
            <Word ID="7">Hus</Word>
            <Word ID="8">Bord</Word>
            <Word ID="9">Hand</Word>
        </Words>
    </Content>
</Dictionary>

Вот так выглядит моя XML-ссылка:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="dictionary.xsl"?>
<links>
    <dictLink>german.xml</dictLink>
    <dictLink>Dic-swedish.xml</dictLink>
    <svgLogo>svglogo.svg</svgLogo>
</links>

А вот так выглядит мой XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:variable name="dictionary1">
<xsl:value-of select="/links/dictLink[1]" />
</xsl:variable>

<xsl:variable name="dictionary2">
    <xsl:value-of select="/dictionaries/dictLink[2]" />
</xsl:variable>

<xsl:variable name="logo">
    <xsl:value-of select="/dictionaries/svgLogo" />
</xsl:variable>

<xsl:template match="/dictionaries">

<html> <body> <xsl:value-of select="document($dic1)/Dictionary/@xml:Language"/><br/> </xsl:for-each> </body></html> </xsl:template> </xsl:stylesheet>

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Поскольку вы используете XSLT 1.0, см. https://www.w3.org/TR/1999/REC-xslt-19991116#output.

Поскольку элемент документа в вашем дереве результатов - html без пространства имен, вы получаете вывод HTML.

См.https://www.w3.org/TR/1999/REC-xslt-19991116#section-Document-Example для примера XSLT 1.0 получения вывода XHTML.Ключевыми частями этого являются:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns="http://www.w3.org/TR/xhtml1/strict">

<xsl:output
   method="xml"
   indent="yes"
   encoding="iso-8859-1"
/>

Если вы хотите объявление DOCTYPE, вы можете изменить свой xsl:output на:

<xsl:output
    method="xml"
    indent="yes"
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
    omit-xml-declaration="yes" />

Лично я бы не стал задавать настройкукодирование по ISO-8859-1.Без атрибута encoding вы получите UTF-8 или UTF-16, и, скорее всего, это будет UTF-8.Будь то UTF-8 или UTF-16, система XML, которая использует выходные данные, сможет обрабатывать кодировку.

0 голосов
/ 18 октября 2018

Это, вероятно, только частичное решение, но вы можете использовать следующие шаблоны для вывода некоторого (X) HTML:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" 
xmlns:de="https://translate.google.se/m/translate?hl=sv/german" 
exclude-result-prefixes="fo de">
  <xsl:output method="html" indent="yes" />

  <xsl:template match="/links">
    <html>
        <body> 
            <xsl:for-each select="dictLink">
                <xsl:copy-of select="document(.)/*[local-name()='Dictionary']" /><br/> 
            </xsl:for-each>
        </body>
    </html> 
  </xsl:template> 
</xsl:stylesheet>

Если вы называете это XSLT dictionary.xsl и вызываете второй XML избраузер, он должен скопировать содержимое Dic-swedish.xml (первый XML) в вывод.

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