我的xsl文件里有这样的代码
<xsl:if test="" expr="this.hasChildNodes">我在浏览器里访问xml文件都可以正确的被解释但是用XslTransform的时候却提示expr属性对于xsl:if元素无效请问应该怎么做啊

解决方案 »

  1.   

    你可以使用
    <xsl:if test="child::node()"/>
      

  2.   

    例子:
    books.xml
    ===============<?xml version="1.0" encoding="utf-8" ?>
    <root>
      <row>
        <cell>1</cell>
        <cell>2</cell>
      </row>
      <row></row>  
    </root>
    output.xsl
    =============
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
        <html>
          <body>
            <xsl:for-each select="/root/row">
              <xsl:value-of select="position()"/>:
              <xsl:if test="child::node()">有</xsl:if>
              <br/>
            </xsl:for-each>
          </body>
        </html>
      </xsl:template>
    </xsl:stylesheet>testXml.aspx
    ============
    <%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">  protected void Page_Load( object sender, EventArgs e )
      {
        System.Xml.Xsl.XslTransform xslt = new System.Xml.Xsl.XslTransform();
        xslt.Load(Server.MapPath("output.xsl"));
        xslt.Transform(Server.MapPath("books.xml"), Server.MapPath("books.html"));
        Response.WriteFile("books.html");
      }
    </script><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title>无标题页</title>
    </head>
    <body>
      <form id="form1" runat="server">
      </form>
    </body>
    </html>
      

  3.   

    例子:
    books.xml
    ===============<?xml version="1.0" encoding="utf-8" ?>
    <root>
      <row>
        <cell>1</cell>
        <cell>2</cell>
      </row>
      <row></row>  
    </root>
    output.xsl
    =============
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
        <html>
          <body>
            <xsl:for-each select="/root/row">
              <xsl:value-of select="position()"/>:
              <xsl:if test="child::node()">有</xsl:if>
              <br/>
            </xsl:for-each>
          </body>
        </html>
      </xsl:template>
    </xsl:stylesheet>testXml.aspx
    ============
    <%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">  protected void Page_Load( object sender, EventArgs e )
      {
        System.Xml.Xsl.XslTransform xslt = new System.Xml.Xsl.XslTransform();
        xslt.Load(Server.MapPath("output.xsl"));
        xslt.Transform(Server.MapPath("books.xml"), Server.MapPath("books.html"));
        Response.WriteFile("books.html");
      }
    </script><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title>无标题页</title>
    </head>
    <body>
      <form id="form1" runat="server">
      </form>
    </body>
    </html>