以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  [求助]有两个xml表单,怎样用xslt实现分类统计转换  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=68488)


--  作者:robinj
--  发布时间:10/18/2008 11:24:00 AM

--  [求助]有两个xml表单,怎样用xslt实现分类统计转换
有两个xml表单。
源xml主要格式是
<Orders>
 <Order>
   <OrderType>Order1</OrderType>
   <Offers>
     <Offer1>Desk</Offer1>
     <Count1>10</Count1>
     <Offer2>Chaire</Offer2>
     <Count2>16</Count2>
     <Offer3>Computer</Offer3>
     <Count3>11</Count3>
   </Offers>
   <Saler>Tomson</Saler>
 </Order>
 <Order>
   <OrderType>Order2</OrderType>
   <Offers>
     <Offer1>Printer</Offer1>
     <Count1>1</Count1>
     <Offer2>Pens</Offer2>
     <Count2>20</Count2>
     <Offer3></Offer3>
     <Count3></Count3>
   </Offers>
   <Saler>Xeom</Saler>
 </Order>
</Orders>

输出xml希望是如下格式
<Orders>
 <Order>
   <OrderType>Order1</OrderType>
   <Count>3</Count>
   <Offers>
     <Offer>Desk</Offer>
     <Count>10</Count>   
   </Offers>
   <Offers>   
     <Offer>Chaire</Offer>
     <Count>16</Count>
   </Offers>
   <Offers>   
     <Offer>Computer</Offer>
     <Count>11</Count>
   </Offers>
   <Saler>Tomson</Saler>
 </Order>
 <Order>
   <OrderType>Order2</OrderType>
   <Count>2</Count>
   <Offers>
     <Offer>Printer</Offer>
     <Count>1</Count>   
   </Offers>
   <Offers>   
     <Offer>Pens</Offer>
     <Count>20</Count>
   </Offers>
   <Saler>Xeom</Saler>
 </Order>
</Orders>
请教怎么用xslt实现?XPath怎么写啊
求助高人


--  作者:Qr
--  发布时间:10/19/2008 12:08:00 PM

--  
你的源XML中Offer和Count节点包含数字序号,这个序号无形中增加XSL代码的难度。正因为如此,只能使用命名模板进行递归遍历。
给你一个思路吧:首先统计源XML每个Offers的子节点个数,通过命名模板,取奇数行得输出XML的Offer,取偶数行得输出XML的Count。输出XML的Offers的个数Count可以 count(Offers/*[not(.=""])) div 2 得到(注意路径)。

忙考试,就不写代码了。


--  作者:hexun831012
--  发布时间:10/21/2008 6:31:00 PM

--  
又来问group by的问题,说实话XSL不适合,为什么不直接输出个分过组的数据再来转换哪?
--  作者:robinj
--  发布时间:10/21/2008 7:08:00 PM

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