以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  XSLT 找不到带有schema的xml根节点  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=76548)


--  作者:leosli
--  发布时间:8/31/2009 9:49:00 AM

--  XSLT 找不到带有schema的xml根节点
各位高手:
我在shell里面调用xalan转换xml,但是我的xslt总是不能找到xml的根节点,如果我删除xml文件根节点schema的定义,就可以找到了。
请大家帮忙解决以下。 十分感谢。


那下面的xml和xsl作为例子,如果我把xml根节点的schema定义和namespace删除,使根节点变为<FEED>,就可以正常转换了。

xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2009 (http://www.altova.com)-->
<FEED xsi:schemaLocation="http://www.xxxxxx.com/xdb/FEED/xxx.xsd xxx.xsd" xmlns="http://www.xxxx.com/xdb/FEED/xxx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <MSG1 MESSAGE_TYPE="BONDS" MESSAGE_TYPE_NO="106">
  <INSTRUMENT>
   <TP_DATE>2009-08-07T03:41:57.239014</TP_DATE>
   <EMSNA>1</EMSNA>
   <INST_TYPE>201</INST_TYPE>
   <OPERATION>DR</OPERATION>
   <SYMBOL>B00081828</SYMBOL>
   <RIC>JP20010158=JSPN</RIC>
   <DSPLY_NAME>CITY OF FUKUOKA </DSPLY_NAME>
   <OFFCL_CODE>20010158</OFFCL_CODE>
   <MATUR_DATE>2013-06-25T00:00:00</MATUR_DATE>
   <CREATION_DATE>2008-06-09T05:50:11</CREATION_DATE>
  </INSTRUMENT>
 </MSG1>
 <MSG2 MESSAGE_TYPE="BONDS" MESSAGE_TYPE_NO="107">
  <INSTRUMENT>
   <TP_DATE>2009-08-07T06:14:17.420433</TP_DATE>
   <EMSN>1</EMSN>
   <INST_TYPE>100</INST_TYPE>
   <OPERATION>I </OPERATION>
   <SYMBOL>ADB169A</SYMBOL>
   <RIC>ADB169A=TS</RIC>
   <DSPLY_NAME>ADB169A</DSPLY_NAME>
  </INSTRUMENT>
 </MSG2>
</FEED>[/QUOTE]


xsl:
[QUOTE]<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>
<xsl:template match="/FEED">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="MSG1"> 
 <xsl:for-each select="INSTRUMENT">
 <xsl:value-of select="TP_DATE"/>|<xsl:value-of select="EMSN"/>|
 <xsl:value-of select="INST_TYPE"/>|
 <xsl:value-of select="RIC"/>|<xsl:value-of select="SYMBOL"/>|
 <xsl:value-of select="DSPLY_NAME"/>|<xsl:value-of select="MATUR_DATE"/>|
 <xsl:value-of select="STRIKE_PRC"/>|<xsl:value-of select="CREATION_DATE"/>
 <xsl:text  disable-output-escaping="yes"> </xsl:text>
 </xsl:for-each>
</xsl:template>
<xsl:template match="MSG2">
 <xsl:for-each select="INSTRUMENT">
 <xsl:value-of select="RIC"/> | <xsl:value-of select="SYMBOL"/> | <xsl:value-of select="DSPLY_NAME"/>
 </xsl:for-each>
</xsl:template>
</xsl:stylesheet


>


[此贴子已经被作者于2009-8-31 17:12:01编辑过]

--  作者:hexun831012
--  发布时间:8/31/2009 4:33:00 PM

--  
请看看XML Namespace标准
你的XSL只解析无命名空间的文档,如果你想解析命名空间为http://www.thomsonreuters.com/xdb/FEED/iffm_cantors.xsd的文档,你必须在XSLT中声明
另外XSLT不解析默认命名空间,请给你的Namespace和QName加前缀
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
45.898ms