如何通过XSL从现有XML文件中的字符串正确调用图像?

时间:2012-11-01 23:39:08

标签: xml xslt image

我在将图像调用到已转换的xsl文件时出现问题。

这似乎很简单,但我无法找到解决方案。我已经尝试在这里搜索并使用提供的各种类似答案,但没有运气。

我正在尝试使用

中的字符串
<image>string</image>

作为显示我的图形的文件路径。

我尝试过的任何结果都会给我一个小小的图形图标。

提前致谢。

编辑:我会更具体。 (对不起,这是漫长的一天)

我正在使用Notepad ++,使用“XML Tools”插件,当我专注于XML文件时,我可以通过指定xsl文件来应用XSL转换。 我把它保存为新创建的html文件。

打开它应该显示我的所有数据+图像。但相反,我得到占位符,而不是找不到图形。 (即在Internet Explorer中,它是带有红叉的小图标。)

在文件开头使用样式表方法调用也应该允许我查看转换,而无需使用Firefox创建任何新文件。但它也无法显示。

这是我的XML:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet href="aperture_event_page.xsl" type="text/xsl"?>
    <listings
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="aperture_venues.xsd">

        <venue id="apv_01">
            <image>/images/apv_01.png</image>
            <other elements></other elements>
            ...
            <more elements>
                <elements></elements>
                ...
            </more elements>
        </venue>

        <venue id="apv_02">
            #repeat#
        </venue>

        <venue id="apv_03">
            #repeat#
        </venue>

        <venue id="apv_04">
            #repeat#
        </venue>
    </listings/>

和我的XSL:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <xsl:element name="html">
            <xsl:element name="head">
                <xsl:element name="title">Event</xsl:element>
            </xsl:element>

            <xsl:element name="body">
                <xsl:element name="image">
                    <img src="{image}"/>
                </xsl:element>
                <xsl:apply-templates select="/listings/venue/image"/>
            </xsl:element>
        </xsl:element>
    </xsl:template>

2 个答案:

答案 0 :(得分:2)

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" omit-xml-declaration="yes"/>
    <xsl:template match="/">
    <xsl:element name="html">
    <xsl:element name="head">
    <xsl:element name="title">Event: Concert</xsl:element>
    </xsl:element>
    <xsl:element name="body">
    <xsl:apply-templates select="/listings/venue/event[@id='eve_01']"/>
    </xsl:element>
    </xsl:element>
    </xsl:template>
    <xsl:template match="event">
    <xsl:element name="img">
    <xsl:attribute name="src">
    <xsl:text>
    http://url to image path/xml/task2/event_page
    </xsl:text>
    <xsl:value-of select="../image/text()"/>
    </xsl:attribute>
    </xsl:element>
    </xsl:template>
    </xsl:stylesheet>

使用xsl:text,我能够指定图像路径网址,然后将图像元素字符串作为文件名来完成完整路径。

答案 1 :(得分:1)

您正在使用<xsl:element>,而您不需要它,并且无法在您所在的地方使用它。

这里还不够完整地告诉我你完成了什么,但这会让你更接近:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <html>
            <head>
                <title>Event</title>
            </head>

            <body>
                <xsl:apply-templates select="/listings/venue/image"/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="image">
        <xsl:element name="img">
            <xsl:attribute name="src">
                <xsl:value-of select="." />
            </xsl:attribute>
        </xsl:element>
    </xsl:template>

 </xsl:stylesheet>

这将生成一系列html <img>标记,src属性正确包含原始xml中每个<image>标记的图像路径。

如果你希望你的输出是xhtml而不是普通的html(因此标签正确地终止为xml),如果你使用XSL 1.0或“xhtml”,你可以将输出方法更改为“xml”你正在使用XSL 2.0。