用存储过程 的for xml auto 返回的XMLReader ,在xmldocument 的load时出错,经查找是返回结果有的中文问题,有遇到过的朋友吗?谈一下解决方案

解决方案 »

  1.   

    一般是编码的问题。XmlTextReader 有一个 Encoding 属性,该属性返回在 XML 声明的 encoding 属性中找到的字符编码。
      

  2.   

    我用的是xmlReader ,SqlCommadn的方法ExecuteXmlReader返回的类型
      

  3.   

    要代码?来了
                 XmlReader Xr = cooperlib.PageNation.getAllRecordForXML(pq);
                XmlDocument xmlDoc = new XmlDocument();
                 xmlDoc.Load(Xr); //出错的地方,提示:出现意外的文件结尾,经查是中文            ServSgXML.TransformSource = "ServSg.xsl";
                ServSgXML.Document = xmlDoc;
    其中xr是从存储过程来的
    XmlReader xdr;
    xdr = cmd.ExecuteXmlReader();数据是SqlServer 2005
    在查询分析器里执行存储过程中生成的XML直接拷入文本文件存入XML文件,用浏览器打开也提示出错,在文件头部加入
    <?xml version="1.0" encoding="gb2312" ?>
    然后预览正常
      

  4.   

    XML文件编码不明确,直接加上.
    <?xml version="1.0" encoding="utf-8" ?> 
      

  5.   


    我的数据源来自SqlServer的存储过程 for xml auto 
    怎么加?
      

  6.   

    使用sp_makewebtask
    添加模板文件,加
    <?xml version="1.0" encoding=”GB2312” ?>
     
      

  7.   

    从sql2005读取数据库通过xslt送显 
    xslt样式:
     1<?xml version="1.0" encoding="utf-8"?>
     2
     3<xsl:stylesheet version="1.0"
     4    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     5    <xsl:output method="html" />
     6    <xsl:param name="BackGroundColor" select="Blue" />
     7<xsl:template match="/">
     8    <HTML>
     9        <HEAD>
    10            <TITLE>xslt测试</TITLE>
    11        </HEAD>
    12        <BODY>
    13            <table border="1" cellSpacing="1" cellPadding="1">
    14                <center>
    15                    <xsl:for-each select="//music">
    16                        <xsl:element name="tr">
    17                            <xsl:attribute name="bgcolor">
    18                                <xsl:value-of select="$Color" />
    19                            </xsl:attribute>
    20                            <xsl:element name="td">
    21                                <xsl:value-of select="gs" />
    22                            </xsl:element>
    23                            <xsl:element name="td">
    24                                <xsl:value-of select="gname" />
    25                            </xsl:element>
    26                            <xsl:element name="td">
    27                                <xsl:attribute name="align">center</xsl:attribute>
    28                                <xsl:value-of select="url" />
    29                            </xsl:element>
    30                        </xsl:element>
    31                    </xsl:for-each>
    32                </center>
    33            </table>
    34        </BODY>
    35    </HTML>
    36</xsl:template>
    37</xsl:stylesheet>
    页面文件中:
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <%@ Import Namespace="System.Xml" %>
    <%@ Import Namespace="System.Xml.Xsl" %>
    <%@ Import Namespace="System.Xml.XPath" %>
    <%@ Import Namespace="System.Web.Configuration" %><script runat="server">                
      void Page_Load(object sender, System.EventArgs e)
      {      
          string connString = WebConfigurationManager.ConnectionStrings["adventureWorks"].ConnectionString; //从WEB.CONFIG读数据库字符连接串
          using (SqlConnection conn = new SqlConnection(connString))
          {
              conn.Open();
              SqlCommand command = new SqlCommand("Select top 5 * from music for xml auto,elements", conn);          
              XmlReader reader = command.ExecuteXmlReader();
              XPathDocument xpathDoc = new XPathDocument(reader); //读取数据并以XML形式返回
              conn.Close();
              string xslPath = Server.MapPath("xsl/music.xsl"); //给XML加样式       
              XslCompiledTransform transform = new XslCompiledTransform();          
              transform.Load(xslPath);
              XsltArgumentList argsList = new XsltArgumentList();
              string backGroundColor = "Tan";
              argsList.AddParam("Color", "", backGroundColor); //给样式附值
              transform.Transform(xpathDoc, argsList, Response.Output);  
              
          }
      }        
    </script>
      

  8.   

    doc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?> " + Xr.ReadOuterXml());
      

  9.   

    自己已经解决,办法:
    在SqlServer2005中
    用 for xml auto,xtype
    然后不用XMLReader而是用object 接收,这样可以转成string 类型,用的时候把编码加上来就行了