用XSLT转换XML遇到性能问题,刚学XSLT不会,希望各位指点

liuhong2003 2009-08-17 07:27:49
XML文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<product>
<id>1</id>
<name>产品1</name>
</product>
<product>
<id>2</id>
<name>产品2</name>
</product>
<product>
<id>3</id>
<name>产品3</name>
</product>
<row>
<orderid>1</orderid>
<customer>客户1</customer>
<product>
<id>1</id>
<qty>100</qty>
</product>
<product>
<id>3</id>
<qty>200</qty>
</product>
</row>
<row>
<orderid>2</orderid>
<customer>客户2</customer>
<product>
<id>2</id>
<qty>234</qty>
</product>
<product>
<id>3</id>
<qty>321</qty>
</product>
</row>
</root>
=========================================
XSLT文件如下:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes" encoding="utf-8" />
<xsl:template match="/">
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet>
<xsl:attribute name="ss:Name">Sheet1</xsl:attribute>
<Table>
<Row>
<xsl:for-each select="root/product">
<Cell>
<Data ss:Type="String">
<xsl:value-of select="id"/>
</Data>
</Cell>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="name"/>
</Data>
</Cell>
</xsl:for-each>
</Row>
<xsl:for-each select="root/row">
<xsl:variable name="orderid" select="orderid" />
<Row>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="orderid"/>
</Data>
</Cell>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="customer"/>
</Data>
</Cell>
<xsl:for-each select="/root/product">
<xsl:variable name="id" select="id"/>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="/root/row[orderid=$orderid]/product[id=$id]/qty"/>
</Data>
</Cell>
</xsl:for-each>
</Row>
</xsl:for-each>
</Table>
</Worksheet>
</Workbook>
</xsl:template>
</xsl:stylesheet>
=========================================
说明:
product为所有产品列表。
row为客户的一个订单,
按上面的XSLT能转成我想要的效果,但是当row节点多转换就要很长时间
希望各位帮忙!
...全文
115 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhong2003 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cds27 的回复:]
像这种问题是无解,XSLT已经是XML转换的几种方法中,最有效率的一种了。

这个是属于设计思想上的问题了,关键在于你有没有必要一次性把所有的数据转换完。
假如你每次只看一部分数据,你应该先做筛选。
又或者人的阅读习惯一次也只能看10-20行,你应该考虑是否分页处理;而分页时,你就可以按照所分的N页,将转换的工作分成N次完成。
[/Quote]
分页处理是很好,
但问题是,我是要把大量数据导出,并保存为XML
cds27 2009-08-19
  • 打赏
  • 举报
回复
像这种问题是无解,XSLT已经是XML转换的几种方法中,最有效率的一种了。

这个是属于设计思想上的问题了,关键在于你有没有必要一次性把所有的数据转换完。
假如你每次只看一部分数据,你应该先做筛选。
又或者人的阅读习惯一次也只能看10-20行,你应该考虑是否分页处理;而分页时,你就可以按照所分的N页,将转换的工作分成N次完成。
街头小贩 2009-08-18
  • 打赏
  • 举报
回复
可以异步加载呀

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧