以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  我有一个问题一个XML格式转换的问题,请高手看一下。  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=9113)


--  作者:nerd
--  发布时间:8/3/2004 1:12:00 PM

--  我有一个问题一个XML格式转换的问题,请高手看一下。
我有一个问题
原XML

<root>
 <one a="1" b="2" c="3" a_aa="11" b_bb="22" c_cc="33" />
</root>

想用XSLT转化之后的结果为

<root>
 <one>
  <a aa="11">1</a>
  <b bb="22">2</b>
  <c cc="33">3</c>
 </one>
</root>


我要如何才能转化成功。难点在如何把下划线之后,作为之前这个点的属性与值,好麻烦啊……我搞不定。


--  作者:现学现卖
--  发布时间:8/3/2004 2:38:00 PM

--  
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
 <xsl:template match="/">
  <xsl:call-template name="createroot"/>
 </xsl:template>
 <xsl:template name="createroot">
  <xsl:element name="root">
   <xsl:element name="one">
    <xsl:apply-templates select="root/one"/>
   </xsl:element>
  </xsl:element>
 </xsl:template>
 <xsl:template match="one">
  <xsl:for-each select="@*">
   <xsl:choose>
    <xsl:when test="contains(name(.),'_')">
     <xsl:element name="{substring-before(name(.),'_')}">
      <xsl:attribute name="{substring-after(name(.),'_')}">
       <xsl:value-of select="."/>
      </xsl:attribute>
     </xsl:element>
    </xsl:when>
   </xsl:choose>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>
--  作者:nerd
--  发布时间:8/3/2004 6:18:00 PM

--  
呵呵,谢谢你的帮助
--  作者:飞翔中的菜鸟
--  发布时间:8/6/2004 8:14:00 AM

--  
2楼的方法太好了!学习~~~~~~~~~~~~~~
--  作者:cgp1996
--  发布时间:9/15/2004 12:48:00 PM

--  
二楼的方法的确很好,不过我试了一下,结果和预计的并不一样,请二楼的高手再指点一下。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms