以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  [求助]<xsl:message terminate="yes">...</xsl:message>用了不起作用.......  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=58371)


--  作者:wangyongshan
--  发布时间:1/23/2008 9:02:00 AM

--  [求助]<xsl:message terminate="yes">...</xsl:message>用了不起作用.......
大家好,
      我现在有这样一个需求:判断一个元素的属性值,如果值不等于规定的一个值,那么整个转换工作终止。。。。
      我使用了 <xsl:message terminate="yes">...</xsl:message>标签
      下面是 我的使用方法:
       ............................................
     <xsl:choose>
          <xsl:when test="@id='1001' ">
             ................
           </xsl:when>
          <xsl:otherwise>
                <xsl:message terminate="yes">                    
                       出现属性值非法,终止转换!
                </xsl:message>
          </xsl:otherwise>
     </xsl:choose>
    ...............................
   当我的属性@id 值不等于 1001 时,应该执行<xsl:otherwise>中的命令,但是却不起任何作用,就连“出现属性值非法,终止转换!”这句话都没有输出,其余的转换工作照样进行。。。。。。。。
  大家帮我看看,到底是哪里错了。。。。。。。


--  作者:孤独
--  发布时间:1/23/2008 8:48:00 PM

--  
<xsl:text>                    
出现属性值非法,终止转换!
</xsl:text>
如果是在网页里面的话这样就可以吧
--  作者:enyaxp
--  发布时间:1/24/2008 3:00:00 AM

--  
你在什么环境下用的?

一般情况下肯定是好用的,可以的话看看你的完整代码行吗?


--  作者:wangyongshan
--  发布时间:1/24/2008 8:52:00 AM

--  
我用的是XMLSpy2006开发的,我用里面自带的XSL转换器转换,结果<xsl:message terminate="yes">...</xsl:message>不起作用,
但是我用 javax.xml.transformer.....类库写程序进行转换,结果<xsl:message terminate="yes">...</xsl:message>起作用了:打印了错误信息并抛出异常,转换也终止了。
我很是纳闷。。。。。
enyaxp 大哥,代码是公司的机密,我不能贴出来。。。请原谅。。。。
我给个完整的例子吧:

<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="message.xsl" ?>
<records>
   <record>
      <name>David Perry</name>
      <address>222 Cherry</address>
      <phone>555-797-79797</phone>
   </record>
   <record>
      <name></name>
      <address>312 Elm</address>
      <phone>555-797-79797</phone>
   </record>
</records>

message.xsl

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:output method="xml" media_type="text/xml" indent="yes" encoding="utf-8" version="1.0"/>
  <xsl:template match="/">
     <xsl:apply-templates select="*"/>
     <xsl:copy-of select="."/>
  </xsl:template>

  <xsl:template match="*">
     <xsl:apply-templates select="//record"/>
  </xsl:template>

  <xsl:template match="record">
     <xsl:if test="name=''">
         <xsl:message terminate="yes">
              记录名字出现空值,终止转换。。。。
         </xsl:message>
     </xsl:if>
  </xsl:template>

</xsl:stylesheet>



--  作者:enyaxp
--  发布时间:1/26/2008 1:13:00 AM

--  

<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="message.xsl" ?>
<records>
    <record>
       <name>David Perry</name>
       <address>222 Cherry</address>
       <phone>555-797-79797</phone>
    </record>
    <record>
       <name></name>
       <address>312 Elm</address>
       <phone>555-797-79797</phone>
    </record>
</records>

message.xsl

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
     <xsl:output method="xml" media_type="text/xml" indent="yes" encoding="utf-8" version="1.0"/>
   <xsl:template match="/">
      <xsl:apply-templates select="*"/>
      <xsl:copy-of select="."/>
   </xsl:template>

   <xsl:template match="*">
      <xsl:apply-templates select="//record"/>
   </xsl:template>

   <xsl:template match="record">
      <xsl:if test="name=''">
          <xsl:message terminate="yes">
               记录名字出现空值,终止转换。。。。
          </xsl:message>
      </xsl:if>
   </xsl:template>

</xsl:stylesheet>


注意加亮的那一行:

关键的问题:encoding="utf-8",编码采用utf-8,而xsl输出为中文字符,这是不行的会导致乱码,改为encoding="gb2312"或用英文表达错误信息就行了。


[此贴子已经被作者于2008-1-27 16:22:36编辑过]

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