以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  [求助]这个问题怎么解决?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=9709)


--  作者:alextoby
--  发布时间:9/3/2004 10:59:00 AM

--  [求助]这个问题怎么解决?
<?xml version="1.0" ?>
<Content>
<Users>
  <UserID>1000</UserID>
  <Name>张三</Name>
  <Password>12431123</Password>
  <Status>Offline</Status>
  <Age>20</Age>
  <Sex>男</Sex>
  <ImageIndex>0</ImageIndex>
  </Users>
<Users>
  <UserID>1008</UserID>
  <Name>方方</Name>
  <Password>ff</Password>
  <IP>210.42.106.35</IP>
  <Status>Offline</Status>
  <Age>20</Age>
  <Sex>女</Sex>
  <ImageIndex>0</ImageIndex>
  </Users>

</Content>

有这么个XML文件,第二个Users比第一个多了个IP(红色表示),我想用XSL把上面的内容用表格表示出来,有IP的显示IP的内容,没有的空出来,这个XSL该怎么写?谢谢


[此贴子已经被作者于2004-9-3 14:51:28编辑过]

--  作者:doubleG
--  发布时间:9/3/2004 3:24:00 PM

--  
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
<xsl:template match="/">
 <table>
  <tr>
   <td>UseID</td>
   <td>Name</td>
   <td>Password</td>
   <td>IP</td>
   <td>Status</td>
   <td>Age</td>
   <td>Sex</td>
   <td>ImageIndex</td>
  </tr>
  <xsl:for-each select="Content/Users">
   <tr>
    <td>
     <xsl:value-of select="UserID"/>
    </td>
    <td>
     <xsl:value-of select="Name"/>
    </td>
    <td>
     <xsl:value-of select="Password"/>
    </td>
    <td>
     <font color="red"><xsl:value-of select="IP"/></font>
    </td>
    <td>
     <xsl:value-of select="Status"/>
    </td>
    <td>
     <xsl:value-of select="Age"/>
    </td>
    <td>
     <xsl:value-of select="Sex"/>
    </td>
    <td>
     <xsl:value-of select="ImageIndex"/>
    </td>
   </tr>
  </xsl:for-each>
 </table>
</xsl:template>
</xsl:stylesheet>
其实没有的节点会自动跳过去,大概就是上面这个意思。
--  作者:孤独
--  发布时间:9/4/2004 7:17:00 PM

--  
<xsl:if test="Ip != ''">
<tr>
<td>
<xsl:value-of select="Ip" />
</td>
</tr>
</xsl:if>
--  作者:alextoby
--  发布时间:9/6/2004 10:31:00 AM

--  
谢谢大家的回答,根据孤独的解决方案,出现“预期的句柄 'eof' 找到 '!='。 Ip -->!=<-- ''
”这个问题,请问如何解决。谢谢!
--  作者:doubleG
--  发布时间:9/6/2004 11:07:00 AM

--  
你的xml文件中IP都是大写的,要保持一致啊。
--  作者:alextoby
--  发布时间:9/6/2004 11:23:00 AM

--  
修改过后问题依然存在。

预期的句柄 'eof' 找到 '!='。 IP -->!=<-- ''


--  作者:doubleG
--  发布时间:9/6/2004 11:28:00 AM

--  
文件大吗?发上来看看,在我的这里是没有问题的。
--  作者:alextoby
--  发布时间:9/6/2004 11:37:00 AM

--  
xml文件:保存成TXT格式了

xsl文件:

<?xml version="1.0" encoding="GB2312" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
  <BODY>
   <TABLE  border="0" cellspacing="1" bgcolor="#666666">
    <TR>
  <TD bgcolor="#FFFFFF">UserID</TD>
  <TD bgcolor="#FFFFFF">Name</TD>
  <TD bgcolor="#FFFFFF">Password</TD>
  <TD bgcolor="#FFFFFF">IP</TD>
  <TD bgcolor="#FFFFFF">Port</TD>
  <TD bgcolor="#FFFFFF">Status</TD>
  <TD bgcolor="#FFFFFF">NickName</TD>
  <TD bgcolor="#FFFFFF">Age</TD>
  <TD bgcolor="#FFFFFF">Sex</TD>
  <TD bgcolor="#FFFFFF">Phone</TD>
  <TD bgcolor="#FFFFFF">CellPhone</TD>
  <TD bgcolor="#FFFFFF">Email</TD>
  <TD bgcolor="#FFFFFF">Country</TD>
  <TD bgcolor="#FFFFFF">Province</TD>
  <TD bgcolor="#FFFFFF">City</TD>
  <TD bgcolor="#FFFFFF">PostNumber</TD>
  <TD bgcolor="#FFFFFF">Address</TD>
  <TD bgcolor="#FFFFFF">Job</TD>
  <TD bgcolor="#FFFFFF">Company</TD>
  <TD bgcolor="#FFFFFF">Bussiness</TD>
  <TD bgcolor="#FFFFFF">Introduce</TD>
  <TD bgcolor="#FFFFFF">ImageIndex</TD>
  <TD bgcolor="#FFFFFF">HomePage</TD>
  <TD bgcolor="#FFFFFF">School</TD>
  <TD bgcolor="#FFFFFF">OtherLink</TD>
  <TD bgcolor="#FFFFFF">Question</TD>
  <TD bgcolor="#FFFFFF">Answer</TD>
  <TD bgcolor="#FFFFFF">ModifyTime</TD>
  <TD bgcolor="#FFFFFF">RegistTime</TD>
 </TR>
   <xsl:for-each select="//Users">
    <TR>
  <xsl:apply-templates />
 </TR>
   </xsl:for-each>
 <TR>
 
 </TR>
   </TABLE>
  </BODY>
</HTML>
</xsl:template>

<xsl:template match="UserID">
<TD bgcolor="#FFFFFF" STYLE="font-size:12t">
  <xsl:value-of />
</TD>
</xsl:template>

<xsl:template match="Name">
<TD bgcolor="#FFFFFF" STYLE="font-size:12t">
  <xsl:value-of />
</TD>
</xsl:template>

<xsl:template match="Password">
<TD bgcolor="#FFFFFF" STYLE="font-size:12t">
  <xsl:value-of />
</TD>
</xsl:template>


<xsl:template match="IP">
<xsl:if test="IP != ''">
  <TD bgcolor="#FFFFFF" STYLE="font-size:12t">
   <xsl:value-of />
  </TD>
</xsl:if>  
</xsl:template>


<xsl:template match="Port">
<TD bgcolor="#FFFFFF" STYLE="font-size:12t">
  <xsl:value-of />
</TD>
</xsl:template>

<xsl:template match="Status">
<TD bgcolor="#FFFFFF" STYLE="font-size:12t">
  <xsl:value-of />
</TD>
</xsl:template>

<xsl:template match="NickName">
<TD bgcolor="#FFFFFF" STYLE="font-size:12t">
  <xsl:value-of />
</TD>
</xsl:template>

<xsl:template match="Age">
<TD bgcolor="#FFFFFF" STYLE="font-size:12t">
  <xsl:value-of />
</TD>
</xsl:template>

<xsl:template match="Sex">
<TD bgcolor="#FFFFFF" STYLE="font-size:12t">
  <xsl:value-of />
</TD>
</xsl:template>

</xsl:stylesheet>


--  作者:alextoby
--  发布时间:9/6/2004 11:52:00 AM

--  
是不是我的XML没有配置好,XSL文件应该是没问题的,但是XML文件一用XSL文件转换就出现了问题。
--  作者:alextoby
--  发布时间:9/6/2004 11:58:00 AM

--  
...
[此贴子已经被作者于2004-9-6 13:01:14编辑过]

--  作者:doubleG
--  发布时间:9/6/2004 12:07:00 PM

--  
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> ——> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
<xsl:value-of />——> <xsl:value-of select="."/>


--  作者:doubleG
--  发布时间:9/6/2004 12:19:00 PM

--  
草案与正式版本有区别的,比较烦人。
如果名称空间是你原来的那个的话,这样就行。
<xsl:if test=".[IP != '']">
  <TD bgcolor="#FFFFFF" STYLE="font-size:12t">
   <xsl:value-of />
  </TD>
</xsl:if>  


--  作者:alextoby
--  发布时间:9/6/2004 1:27:00 PM

--  
谢谢楼上的回答!

使用xsl:if判断,则原来的IP节点的内容也没有了,

此主题相关图片如下:
按此在新窗口浏览图片
不使用xsl:if判断的结果

此主题相关图片如下:
按此在新窗口浏览图片

还是答不到预期的效果。。。请帮忙看看


--  作者:doubleG
--  发布时间:9/6/2004 2:10:00 PM

--  
这是因为你用了template的原因,它会寻找match的节点,如果没有的话就不会执行template里的内容,所以会出现错位的情况因为少了<td>,如果不用template的话全写在总的template下就可以避免这样,但是前提是你的所有元素都必须写出来,很罗嗦。最好你的xml格式完整一些,不存在IP就用<IP/>表示就好了。


--  作者:alextoby
--  发布时间:9/8/2004 11:30:00 AM

--  
Thanks!
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
218.750ms