1

我正在尝试将一些 xml 文件放在一起,并使用 xslt 转换将它们输出到 xhtml 中。我通过指定一个名为 index.xml 的 xml 文件来解决这个问题,我在其中定义了我需要使用的其他文件,如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="merge.xsl"?>

<dic:dictionary xmlns:dic = "dictionary">
<dic:Logo>Logo</dic:Logo>
<dic:Author>User Name</dic:Author>
<dic:EnglishWords>english</dic:EnglishWords>
<dic:SwedishTranslation>swedish</dic:SwedishTranslation>
<dic:SwedishWords>swedish</dic:SwedishWords><br/>
<dic:EnglishTranslation>english</dic:EnglishTranslation>
</dic:dictionary>

然后在我的转换中,我有一个徽标的模板声明,如下所示:

<!--Logo-->
 <xsl:template match = "dic:index//Logo">
 <html>
     <head>
        <link rel="stylesheet" type="text/css" href="Style.css" />
     </head>
     <body>
        <div id = "Logo">
            <xsl:apply-templates select="document(concat(.,'.svg'))"/>
        </div>
    </body>
  <xsl:apply-templates/>
</html></xsl:template>

svg 文件本身如下所示:

<?xml version="1.0" standalone="no"?>

<?xml-stylesheet href="Style.css" type="text/css"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
     width="180px" height="70px" viewBox="0 0 180 70" 
     enable-background="new 0 0 180 70" xml:space="preserve" 
     preserveAspectRatio="xMinYMin meet">

<line fill="none" stroke="#000000" x1="0" y1="71.533" x2="35.036" y2="5.109"/>
<line fill="none" stroke="#000000" x1="91.971" y1="15.767" x2="91.971" y2="71.533"/>
<line fill="none" stroke="#000000" x1="146.357" y1="5.109" x2="177.372" y2="71.533"/>
<line fill="none" stroke="#000000" x1="0" y1="71.533" x2="177.372" y2="71.533"/>
<line fill="none" stroke="#000000" x1="17.518" y1="58.108" x2="82.481" y2="58.108"/>
<line fill="none" stroke="#000000" x1="101.459" y1="58.108" x2="161.866" y2="58.108"/>
<line fill="none" stroke="#000000" x1="82.481" y1="58.108" x2="91.971" y2="71.533"/>
<line fill="none" stroke="#000000" x1="101.459" y1="58.108" x2="91.971" y2="71.533"/>

</svg>

然而,虽然这种方法适用于其他 xml 文件,但不适用于这个 svg 文件,作为输出,我只得到单词 Logo。我一直在四处寻找,但我没有看到一个很好的例子来说明如何做到这一点。此外,当我尝试应用 css 样式表时,我有以下内容

#Logo{
width: 300px ;
margin-left: auto ;
margin-right: auto ;
}

它也不起作用......如何使css工作......?

任何有关此的帮助或信息将不胜感激。

非常感谢你。

4

2 回答 2

0

为什么不简单地<xsl:copy-of select="document(concat(., '.svg'))"/>代替apply-templates? 或者您想以某种方式转换 SVG?并且不清楚 SVG 文档的路径或文件名包含在 XML 输入示例中的什么位置。

于 2013-01-21T14:57:23.213 回答
0

请试试这个:

<!--Logo-->
<xsl:template match = "dic:dictionary/dic:Logo">
 <html>
     <head>
        <link rel="stylesheet" type="text/css" href="Style.css" />
     </head>
     <body>
        <div id = "Logo">
            <xsl:copy-of select="document(concat(.,'.svg'))/*"/>
        </div>
    </body>
 </html>
</xsl:template>

您需要删除<xsl:apply-templates>最后的 (这就是复制“徽标”文本的内容),并用于<xsl:copy-of>复制 SVG 文件的内容。

于 2013-01-21T15:50:35.557 回答