求解XSLT格式化问题!

dicman 2005-10-12 04:27:58
XML文档格式如下:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="syn_test.xsl"?>
<Servers Update='9/6/2005 11:37:26 AM'>
<Server Name="Newsql">
<Db Name="Abs">
<Article Name="InventoryTransaction">
<Chain Name="Abs - inventoryTransaction">A</Chain>
<Chain Name="Abs - inventoryTransaction">B</Chain>
<Chain Name="Abs - inventoryTransaction">C</Chain>
<Chain Name="Rp_AbsInventoryTransaction_Trn">D</Chain>
</Article>
</Db>
<Db Name="act">
<Article Name="ABS_Dep">
<Chain Name="act">E</Chain>
<Chain Name="act">F</Chain>
</Article>
<Article Name="ApCheck">
<Chain Name="act">G</Chain>
<Chain Name="act-datawarehouse">H</Chain>
<Chain Name="act">I</Chain>
</Article>
</Db>
</Server>
<Servers>

要求将上述XML文档格式化成以下格式:
-------------------------------------------------------------------------------------
| Server | DB | TableName | Chain |
-------------------------------------------------------------------------------------
| Newsql | Abs | InventoryTransaction | A |
| | | |-------------------------------|
| | | | B |
| | | |-------------------------------|
| | | | C |
| | | |-------------------------------|
| | | | D |
| |------------|---------------------------|-------------------------------|
| | act | ABS_Dep | E |
| | | |-------------------------------|
| | | | F |
| | |---------------------------|-------------------------------|
| | | ApCheck | G |
| | | |-------------------------------|
| | | | H |
| | | |-------------------------------|
| | | | I |
|-----------------------------------------------------------------------------------|

求XSL文件源代码及详细思路,小弟实在写不出了,不得已出此下策,感谢各位了!
如表格显示杂乱,请将表格拷贝到记事本就能显示正确的格式
...全文
146 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lijiangchxp2005 2005-10-13
你先用 DW 将结果给为 HTML 文件,再由 HTML 文件改成 Xslt 就可以了
我原来显示报表就是用这种方式,先将要得到的结果画出来(HML)再改成xsl,报表比你这个还复杂
  • 打赏
  • 举报
回复
dicman 2005-10-13
感谢saucer(思归)给予正确解答,感谢Sunmast(Maybe I'm Amazed)的热心支持!
  • 打赏
  • 举报
回复
saucer 2005-10-13
maybe there is a better way, but try

syn_test.xsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="Servers">
<table border="1">
<tr>
<th>Server</th>
<th>DB</th>
<th>TableName</th>
<th>Chain</th>
</tr>
<xsl:apply-templates select="Server" />
</table>
</xsl:template>

<xsl:template match="Server">
<xsl:variable name="server" select="." />
<xsl:for-each select="Db">
<xsl:variable name="db" select="." />
<xsl:variable name="dbpos" select="position()" />
<xsl:for-each select="Article">
<xsl:variable name="article" select="." />
<xsl:variable name="artpos" select="position()" />
<xsl:for-each select="Chain">
<xsl:variable name="chainpos" select="position()" />
<tr>
<xsl:if test="$dbpos = 1 and $artpos = 1 and $chainpos = 1 ">
<td rowspan="{count($server//Chain)}"><xsl:value-of select="$server/@Name" /></td>
</xsl:if>

<xsl:if test="$artpos = 1 and $chainpos = 1 ">
<td rowspan="{count($db//Chain)}"><xsl:value-of select="$db/@Name" /></td>
</xsl:if>

<xsl:if test="$chainpos = 1 ">
<td rowspan="{count($article//Chain)}"><xsl:value-of select="$article/@Name" /></td>
</xsl:if>

<td><xsl:value-of select="." /></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
  • 打赏
  • 举报
回复
速马 2005-10-13
>>> 求XSL文件源代码及详细思路,小弟实在写不出了,不得已出此下策
你这是求思路吗?
先学一下XSL/T的语法,看看MSDN上的MSXML 4.0的SDK
这种的用最基础的语法就能做到

弄不出来我明天可以帮你写一个
  • 打赏
  • 举报
回复
sxBamboo 2005-10-12
从搜索中找到该文章,小弟也想知道
  • 打赏
  • 举报
回复
dicman 2005-10-12
有人能解答吗?
  • 打赏
  • 举报
回复
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2005-10-12 04:27
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。