+ -
当前位置:首页 → 问答吧 → 在xml+xsl 做的网页中,怎样贴图?(难题)

在xml+xsl 做的网页中,怎样贴图?(难题)

时间:2004-07-08

来源:互联网

我有一个新闻模板,
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="template.xsl"?>
<NEWS>
   <TITLE>中华人民共和国五笔字型计算机汉字输入技术&lt;br&gt;&lt;img src=http://sdfsd&gt;</TITLE>
   <TYPES>lx</TYPES>
   <TIME>Date</TIME>
   <CONTENT>H_Memo</CONTENT>
   <PRINT>From</PRINT>
   <WRITE>Fname</WRITE>
</NEWS>
为什么那段<img src=http://sdfsd>成了代码,却不能成图片呢?这个只能放在xml里面。因为xml是我的数据文件,xsl只是模板。

XML文件里:
<TITLE><![CDATA[中华人民共和国五笔字型计算机汉字输入技术<br><img src=http://sdfsd>]]></TITLE>

xsl这样输出:
<xsl:value-of select="NEWS/TITLE" disable-output-escaping = "yes"/>

这样的话,就呈代码输出,而不是调用图片。


我想,在.xml 中:
<CONTENT>5.jpg</CONTENT>

.xsl 中:
<img>
<xsl:attribute name="src">
<xsl:value-of select="CONTENT"/>
</xsl:attribute>
</img>

这样,一张图片就必须用一个元素。而且不能带别的内容,要不,也会被认为是图片文件名。如果我的文章内容又有文字,又包含图片。该怎么办?
如果内容是:中华人民共和国5.jpg五笔字型计算机汉字输入技术。
会被认为是 <img src=中华人民共和国5.jpg五笔字型计算机汉字输入技术.jpg>

而且一张图片就必须用一个元素,如果我有多张图片。该怎么办?

作者: ahxiaxin   发布时间: 2004-07-08

xsl还没学,好象可以在xsl中这样加脚本的吧?
<script>
<![CDATA[
function 123() {
...........
}
]]>
</script>
这个先不说了,因为我不确定

如果是我就这样
在data.xml中
<51js>
<show>[zd]中华人民共和国[/zd][zhuo]5.jpg[/zhuo][zd]五笔字型计算机汉字输入技术[/zd][zhuo]6.jpg[/zhuo]</show>
</51js>
然后用脚本连接加载xml文件
var show;
function checkDom() {
this.name=navigator.appName.toLowerCase()
this.ver=navigator.appVersion.toLowerCase()
this.opera=(this.name=="opera")?1:0
this.dom=(document.getElementById&&!this.opera)?1:0
this.ie=(document.all)?1:0
this.ie6=(this.dom&&this.ie&&this.ver.indexOf('msie 6'))?1:0
this.ie5=(this.dom&&this.ie&&!this.ie6)?1:0
this.ns4=(document.layers)?1:0
this.ns6=(this.dom&&!this.ie)?1:0
this.ns=(this.ns4||this.ns6)?1:0
this.bw=(this.dom||this.ie||this.ns||this.opera)?1:0
}
bw = new checkDom()

function loadfile() {
if (bw.ie==1) {
show=new ActiveXObject("Microsoft.XMLDOM"); show.async="false"; show.load("data.xml");
}
else {
show = document.implementation.createDocument("", "show", null);
show.addEventListener("load", fileloaded, false);
show.load("data.xml");
}
}

加载完毕后要替换先前xml中的符号[zd][zhuo],其实和UBB是一样的道理

function fileloaded(e) {
var a = show.getElementsByTagName("51js")[0];
var b = a.getElementsByTagName("show")[0].firstChild.data;
var c = b.length;
for(var d=0; d<c; d++) {
b = b.replace("[zd]", "<b>");  
b = b.replace("[/zd]", "</b>");
b = b.replace("[zhuo]", "<img  src='");
b = b.replace("[/zhuo]", "' border='0'/>");
}
document.write(b);
}
loadfile();
这样就完成了替换

也就是在xsl中加脚本将xml的中符号替换掉

[ 本帖由 zdzhuo 于 2004-7-8 22:33 最后编辑 ]

作者: zdzhuo   发布时间: 2004-07-08

替换我知道,可你就算替换了,在xml中,它只会将<img src=xxx>呈代码输出,而不是图片。

作者: ahxiaxin   发布时间: 2004-07-09

我先前说的是将图文混排的内容在xhtml或htm中显示出来
xml只是作为数据源

你的意思是让xml+xsl直接出图文混排的效果吧
xsl我不熟 抱歉 因为现在实在没精力和时间去学
但我感觉把替换的脚本放在xsl文件里能解决这个问题

也许这个对你有用
http://www.suodenjoki.dk/us/prod ... /lyngby_gallery.xml

[ 本帖由 zdzhuo 于 2004-7-9 22:08 最后编辑 ]

作者: zdzhuo   发布时间: 2004-07-09

在xsl中判断,如果有图片就在图片地址两边加上元素。这个元素只输出图片。这样就解决了xml数据中图文并排的问题。

作者: ahxiaxin   发布时间: 2004-07-12

纯xml有实体数据类型,但是支持的软件还很少,所以不能显示图片吧.替换的话也许可以.

作者: 单身   发布时间: 2004-07-12

图片可以输出,但并不是图文并排。而是图片始终在前面,再显示图片前面的文字。而图片后面的文字不见了。



ll.xml
-----------------------------
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="template.xsl"?>
<NEWS>
   <CONTENT>
     这些是图片前面的文字
      <LINK>http://dotnet.aspx.cc/Images/logoSite.gif</LINK>
     这些是图片后面的文字
   </CONTENT>
</NEWS>


template.xsl
-------------------------------------
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://dotnet.aspx.cc/">
        <xsl:template match="/">
                <xsl:apply-templates select="NEWS/CONTENT"/>
        </xsl:template>
        <xsl:template match="NEWS/CONTENT">
                <xsl:if test="LINK">
                        <img>
                                <xsl:attribute name="src"><xsl:value-of select="LINK"/></xsl:attribute>
                        </img>
                </xsl:if>
                <xsl:value-of select="text()"/>
                <p></p>
        </xsl:template>
</xsl:stylesheet>

作者: ahxiaxin   发布时间: 2004-07-12

1.xml
----------------------------------
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="2.xsl"?>
<NEWS>
<CONTENT>


中华人民共和国中华人民共和国
这些是图片前面的文字
<LINK>5.gif</LINK>
这些是图片后面的文字
</CONTENT>
</NEWS>



2.xsl
-------------------------------------------
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://dotnet.aspx.cc/">
<xsl:template match="NEWS/CONTENT">

<xsl:for-each select="* | text()">
<xsl:choose>
<xsl:when test="name()='LINK'">
<img>
<xsl:attribute name="src">
<xsl:value-of select="."/>
</xsl:attribute>
</img>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

作者: ahxiaxin   发布时间: 2004-07-12