以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  用xslt转换xml到xml时老转不过来,急急急!!!!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=9313)


--  作者:txcdhp
--  发布时间:8/12/2004 10:03:00 AM

--  用xslt转换xml到xml时老转不过来,急急急!!!!
用xslt转换xml到xml时老转不过来,为什么?
要转的xml文档如下:
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="ElemsToAttS.xsl"?>
<people>
 <name>
  <first>John</first>
  <middle>Fitzgerald Johansen</middle>
  <last>Doe</last>
 </name>
 <name>
  <first>Franklin</first>
  <middle>D.</middle>
  <last>Roosevelt</last>
 </name>
 <name>
  <first>Alfred</first>
  <middle>E.</middle>
  <last>Neuman</last>
 </name>
 <name>
  <first>John</first>
  <middle>Q.</middle>
  <last>Public</last>
 </name>
 <name>
  <first>Jane</first>
  <middle>dsf</middle>
  <last>Doe</last>
 </name>
</people>

xslt文件ElemsToAttS.xsl如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>

  <xsl:template match="/">
    <xsl:element name="people">
      <xsl:apply-templates select="/people"/>
    </xsl:element>    
  </xsl:template>  
    <xsl:template  match="//name">   
    <xsl:element name="name"   use-attribute-sets="NameAttributes"/>
  </xsl:template>
  
  <xsl:attribute-set name="NameAttributes">
    <xsl:attribute name="first"><xsl:value-of select="first"/></xsl:attribute>
    <xsl:attribute name="middle"><xsl:value-of select="middle"/></xsl:attribute>
    <xsl:attribute name="last"><xsl:value-of select="last"/></xsl:attribute>
  </xsl:attribute-set>

</xsl:stylesheet>


--  作者:kittypig
--  发布时间:8/12/2004 11:55:00 AM

--  
要实现你的转换,我觉得将你的ElemsToAttS.xsl写成这样就可以啊,而且我刚才已经测试了,能够转换成功
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>

  <xsl:template match="people">
    <xsl:element name="people">
      <xsl:apply-templates select="name"/>
    </xsl:element>    
  </xsl:template>  
  <xsl:template match="name">
  <xsl:element name="name">
   <xsl:attribute name="first"><xsl:value-of select="first"/></xsl:attribute>
    <xsl:attribute name="middle"><xsl:value-of select="middle"/></xsl:attribute>
    <xsl:attribute name="last"><xsl:value-of select="last"/></xsl:attribute>

   
  </xsl:element>
 </xsl:template>
</xsl:stylesheet>


--  作者:txcdhp
--  发布时间:8/12/2004 5:13:00 PM

--  
那为什么我用浏览器打开那个xml文档,显示的不是xml文档而是如下内容呢?:
JohnFitzgerald JohansenDoeFranklinD.RooseveltAlfredE.NeumanJohnQ.Pu
blicJanedsfDoe


如果转换成功了的话,那应该是xml文档阿,可是浏览器中只是把这些名字多读出来了阿?


--  作者:kittypig
--  发布时间:8/12/2004 5:37:00 PM

--  
我没有直接用浏览器打开,而是写的javascript,先load了这个xml,再load这个xslt,然后用
xmlDoc.loadXML(xmlDoc.documentElement.transformNode(xslDoc))转换的,我把这个转换后的xml用弹出框看了的,是对的啊
--  作者:kittypig
--  发布时间:8/12/2004 5:42:00 PM

--  
不过我在xml里没用你<?xml-stylesheet type="text/xsl" href="ElemsToAttS.xsl"?>
这句话,我用了,在IE里就看不到这个xml了
--  作者:kittypig
--  发布时间:8/12/2004 5:48:00 PM

--  
function init() {
  xmlDoc = new ActiveXObject('MSXML2.DOMDocument');
  xmlDoc.async = false;
  
  xslDoc = new ActiveXObject('MSXML2.DOMDocument');
  xslDoc.async = false;
   xmlDoc.load("people.xml");
   alert(xmlDoc.xml);
  xslDoc.load("ElemsToAttS.xslt");
  alert(xslDoc.xml);
xmlDoc.loadXML(xmlDoc.documentElement.transformNode(xslDoc));
   alert(xmlDoc.xml);

}
这是我转化你的xml写的javascript,我把这些都用弹出框看了的,是正确的啊。我用的是xslt,不是xsl的后缀名


--  作者:kittypig
--  发布时间:8/12/2004 5:52:00 PM

--  
用xslt或xsl是没有关系的,我都能用javascript转化,并能正确显示,但是就是不能在xml里没用<?xml-stylesheet type="text/xsl" href="ElemsToAttS.xsl"?>这句话,在IE里还是什么都看不
--  作者:txcdhp
--  发布时间:8/12/2004 6:02:00 PM

--  
谢谢呢作了这么精辟的回复!我是在xmlspy里面作的,如果不写<?xml-stylesheet type="text/xsl" href="ElemsToAttS.xsl"?>的话,就抱错,可能是jscript里面只要你load了xslt文档,程序就没认为是那个xslt,我先试试吧,谢谢阿!
可不可以留个QQ或EMAIL什么的


--  作者:kittypig
--  发布时间:8/12/2004 6:04:00 PM

--  
email吧:cnlppl@yahoo.com.cn,下班了,88
--  作者:txcdhp
--  发布时间:8/13/2004 9:00:00 AM

--  
真奇怪,那我用开始的那个xsl怎么不行呢?就是开始用了“attribute-sets”那个,jscript也alert不出来,后来我用了你改了的那个xsl就行了,我想应该是一样的阿,另外在xmlspy里面还是转不了,她跟本就没显示

--  作者:laofuzhou
--  发布时间:8/19/2004 2:58:00 PM

--  
我想你开头那个,转不了是因为:
  <xsl:template match="/">
    <xsl:element name="people">
      <xsl:apply-templates select="/people"/>
    </xsl:element>    
  </xsl:template>

中建那个<xsl:apply-templates select="/people"/>是无法找到匹配的template的


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