Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSL将XML转换为XHTML_Xml_Xslt_Xhtml - Fatal编程技术网

使用XSL将XML转换为XHTML

使用XSL将XML转换为XHTML,xml,xslt,xhtml,Xml,Xslt,Xhtml,我有两个XML文件,其中包含两个字典,其中有两种不同语言的10个单词(相同的单词)。现在我想使用XSL链接这两个XML并将它们转换为XHTML 我现在这样做,它似乎只给我一个HTML输出。我该怎么做,我必须把HTML转换成XHTML,还是直接转换成XHTML 下面是我的一个字典XML的样子: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="dict.css"?>

我有两个XML文件,其中包含两个字典,其中有两种不同语言的10个单词(相同的单词)。现在我想使用XSL链接这两个XML并将它们转换为XHTML

我现在这样做,它似乎只给我一个HTML输出。我该怎么做,我必须把HTML转换成XHTML,还是直接转换成XHTML

下面是我的一个字典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 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>

瑞典的
斯文斯克奥德利斯塔酒店
翻译
瓦滕
Häst
比尔
凯特
匈奴
斯诺
加塔
溶血性尿毒综合症
博尔德
手
这就是我的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 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>

德语.xml
Dic-swedish.xml
svglogo.svg
我的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>



这可能只是部分解决方案,但您可以使用以下模板输出一些(X)HTML:




如果将此XSLT命名为
dictionary.xsl
,并从浏览器中调用第二个XML,则它应将
Dic swedish.XML
(第一个XML)的内容复制到输出中。

因为您使用的是XSLT 1.0,请参阅

因为结果树中的document元素是
html
,不在名称空间中,所以您得到的是html输出

有关生成XHTML输出的XSLT1.0示例,请参见。其中的关键部分包括:

<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"
/>

就个人而言,我不会费心将编码设置为ISO-8859-1。如果没有
encoding
属性,您将得到UTF-8或UTF-16,而且很可能是UTF-8。无论是UTF-8还是UTF-16,使用输出的XML系统都将能够处理编码。

虽然这是正确的答案,但说明如何将编码设置为ISO-8859-1,然后告诉OP不要麻烦的部分令人困惑。为什么不将示例更改为使用OP拥有的相同编码?
encoding=“iso-8859-1”
是XSLT 1.0规范中的逐字逐句。我从规范中复制了这些内容,以保存获得的注释,这些注释非常喜欢不依赖外部网站的自包含答案。如果没有
编码
属性,结果将是UTF-8或UTF-16。现在,很可能是UTF-8。我只是说没有必要逐字复制W3C示例代码。毕竟,这是一个例子。