以文本方式查看主题

-  计算机科学论坛  (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=50125)


--  作者:landofdreams
--  发布时间:7/17/2007 6:42:00 PM

--  [求助]如何实现这个功能?
<?xml ?>
<CustomerData>
  <Transaction>
     <DSLFIELDS>
       <ID>89</ID>
       <ADDR>94458</ADDR>
     </DSLFILEDS>
  </Transaction>
  //...多个Transaction
</CustomerData>

要求是这样:

1.根据ID、ADDR对Transaction排序,同时增加两个字段ID_OMR,ADDR_OMR;规则如下:

举例
---------------------------------------------------------
ID     ADDR    ID_OMR    ADDR_OMR
--------------------------------------------------------
001   12345   Y              Y
001   12358                   Y
001   12358              
002   1345    Y               Y
002   1358                     Y
003   1235    Y               Y

2. 在源文件比较大的情况下,XSLT processor的性能如何?哪个更好?
3. 输出文件仍为XML

哪位大侠帮忙给出完整的xsl文件,不胜感激。


--  作者:Qr
--  发布时间:7/17/2007 6:55:00 PM

--  
看这个:
http://bbs.xml.org.cn/dispbbs.asp?boardID=8&ID=50054
看懂了,答案就出来了

还有这个:http://bbs.xml.org.cn/dispbbs.asp?boardID=8&ID=50062
都一样。


--  作者:landofdreams
--  发布时间:7/17/2007 7:50:00 PM

--  
我理解这两个例子的语法。但理解不等于能自己写出来。
想按Transaction排序,还要插入两个新的字段。哪位大侠能搞定?我试了很久。
--  作者:Qr
--  发布时间:7/18/2007 8:57:00 AM

--  
按Transaction排序?怎么可能!
插入新字段可用:<xsl:element>,例:<xsl:element name="ID_OMR">这里是文本</xsl:element>
--  作者:landofdreams
--  发布时间:7/18/2007 9:27:00 AM

--  
按Transaction排序,我觉得可行。首先把每个Transaction/DSLFIELDS/ID和ADDR设为Transaction的属性。然后再按这两个属性排序。我已经在XMLSpy运行成功。

<Transaction ID="22" ADDR="78324">
<DSLFILEDS>...</DSLFIELDS>
</Transaction>

关键是第一步,我设置Transaction属性时取不到ID和ADDR值。也许是value-of的select的XPath有误。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="xs fn xsl">
 <xsl:template match="/">
  <xsl:for-each select="CustomerData/Transaction">
   <xsl:call-template name="inserting"/>
  </xsl:for-each>
 </xsl:template> 
 <xsl:template name="inserting">
  <xsl:element name="Transaction">
   <xsl:attribute name="ID">
    <xsl:value-of select="/ID" />
   </xsl:attribute>   
   <xsl:attribute name="ADDR">
    <xsl:value-of select="/ADDR" />
   </xsl:attribute>
  </xsl:element>  
 </xsl:template>  
</xsl:stylesheet>


--  作者:Qr
--  发布时间:7/18/2007 9:40:00 AM

--  
取属性值要在属性名前加@
--  作者:landofdreams
--  发布时间:7/18/2007 9:59:00 AM

--  
我知道取属性加@

我的问题是设置Transaction的属性,取值的时候出问题了。


--  作者:Qr
--  发布时间:7/18/2007 10:06:00 AM

--  
偶觉得没什么两样,想不明白你所指的问题。
--  作者:landofdreams
--  发布时间:7/18/2007 10:16:00 AM

--  
通过XSL将以下XML转化成下一个XML,

<?xml ?>
<CustomerData>
  <Transaction>
     <DSLFIELDS>
       <ID>89</ID>
       <ADDR>94458</ADDR>
     </DSLFILEDS>
  </Transaction>
  //...多个Transaction
</CustomerData>

结果:

<?xml ?>
<CustomerData>
  <Transaction ID=“89” ADDR=“94458”>
     <DSLFIELDS>
       <ID>89</ID>
       <ADDR>94458</ADDR>
     </DSLFILEDS>
  </Transaction>
  //...多个Transaction
</CustomerData>

以下XSL有错误,哪位大侠指正
<xsl:template match="/">
  <xsl:for-each select="CustomerData/Transaction">
   <xsl:call-template name="inserting"/>
  </xsl:for-each>
</xsl:template>
<xsl:template name="inserting">
  <xsl:element name="Transaction">
   <xsl:attribute name="ID">
    <xsl:value-of select="/ID" />
   </xsl:attribute>   
   <xsl:attribute name="ADDR">
    <xsl:value-of select="/ADDR" />
   </xsl:attribute>
  </xsl:element>  
</xsl:template>


--  作者:Qr
--  发布时间:7/18/2007 11:11:00 AM

--  
<xsl:template match="/">
<CustomerData>
  <xsl:for-each select="CustomerData/Transaction/DSLFIELDS">
   <xsl:call-template name="inserting"/>
  </xsl:for-each>
</CustomerData>
</xsl:template>
<xsl:template name="inserting">
  <xsl:element name="Transaction">
   <xsl:attribute name="ID">
    <xsl:value-of select="ID" />
   </xsl:attribute>   
   <xsl:attribute name="ADDR">
    <xsl:value-of select="ADDR" />
   </xsl:attribute>
<DSLFIELDS>
<ID><xsl:value-of select="ID" /></ID>
<ADDR><xsl:value-of select="ADDR" /></ADDR>
</DSLFIELDS>
  </xsl:element>  
</xsl:template>


XPath,你要加强了!


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