2012-01-26 5 views
2

私はサーバーにXML + XSLをクライアントに送り、うまく動作するクライアント側の変換を行うaspxページを持っています。サーバサイドのXML処理でエラーを取得する

私はクライアントを検出しようとしていますが、クライアント側の変換をサポートしていない場合、私はそれをサーバサイドでやっています。レンダリングプロセッサにXMLを返すaspxページを中断しています。出力をXSLページの出力と組み合わせて表示しています。しかしながら、この出力は良好に形成されていない。私はそれを生成した場合、私は私が私与える

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html> 
     <head> 
     <META http-equiv="Content-Type" content="text/html; charset=utf-16"> 
     <link rel="stylesheet" type="text/css" href="./css/dboard.css"> 
     <link rel="stylesheet" type="text/css" href="./css/dboardmenu.css"> 
<script type="text/javascript" src="./js/simpletabs.js"></script> 
<link href="../css/simpletabs.css" rel="stylesheet" type="text/css"> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"> 
</script> 
<script type="text/javascript"> 
        $(document).ready(function() { 
         $("#BlogSelectList li a").live("click", function() { 
          var str = ($(this).attr("href")).slice(1, 37) 
          $.ajax({ 
           contentType: "application/json; charset=utf-8", 
           url: '../ws/WebServices.asmx/SetActiveBlog', 
           data: '{ActiveBlogID: "' + str + '"}', 
           dataType: 'json', 
           type: "post", 
           success: function (j) { 
             window.location.href = 'dashboard.aspx' 
           } 

          }); 

         }); 
        }) 

         function showlayer(layer) { 
          var myLayer = document.getElementById(layer); 
          if (myLayer.style.display == "none" || myLayer.style.display == "") { 
           myLayer.style.display = "block"; 
          } 
          else { 
           myLayer.style.display = "none"; 
          } 
         } 


     </script></head> 

を取得し、サーバ側インスタンス

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <link rel="stylesheet" type="text/css" href="./css/dboard.css"/> 
    <link rel="stylesheet" type="text/css" href="./css/dboardmenu.css"/> 
    <script type="text/javascript" src="./js/simpletabs.js"/> 
    <link href="../css/simpletabs.css" rel="stylesheet" type="text/css"/> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"/> 
    <script type="text/javascript"> 
       $(document).ready(function() { 
        $("#BlogSelectList li a").live("click", function() { 
         var str = ($(this).attr("href")).slice(1, 37) 
         $.ajax({ 
          contentType: "application/json; charset=utf-8", 
          url: '../ws/WebServices.asmx/SetActiveBlog', 
          data: '{ActiveBlogID: "' + str + '"}', 
          dataType: 'json', 
          type: "post", 
          success: function (j) { 
            window.location.href = 'dashboard.aspx' 
          } 

         }); 

        }); 
       }) 

     function showlayer(layer) { 
      var myLayer = document.getElementById(layer); 
      if (myLayer.style.display == "none" || myLayer.style.display == "") { 
       myLayer.style.display = "block"; 
       } 
       else { 
      myLayer.style.display = "none"; 
      } 
     } 

     </script></head> 

のために取得するには、クライアント側で

XML Parsing Error: mismatched tag. Expected: </link>. 
Location: http://oohrl.com/dashboard.aspx 
Line Number 36, Column 20:  </script></head> 
-------------------^ 

が正常に動作し、出力を生成し得ますエラー。もちろん、 <link/><link>タグの違いに気づいていますが、なぜサーバ側の処理エンジンが私に別の結果を与えるのか、どうやって修正するのか分かりません。ここで

あなたの出力ドキュメントのルート要素は、プロセッサがデフォルトの形式としてHTMLを選択し、<html>ですので、私は、サーバー

protected override void Render(HtmlTextWriter writer) 
    { 

     StringBuilder sb = new StringBuilder(); 
     StringWriter sw = new StringWriter(sb); 
     HtmlTextWriter hWriter = new HtmlTextWriter(sw); 
     base.Render(hWriter); 
     // *** store to a string 
     string XMLOutput = sb.ToString(); 
     // *** Write it back to the server 
     if (!Request.Browser.IsBrowser("IE")) 
     { 
      writer.Write(XMLOutput); 
     } 
     else 
     { 
      StringWriter XSLsw = new StringWriter(); 
      HttpContext.Current.Server.Execute("DashboardXSL.aspx", XSLsw); 
      string output = String.Empty; 
      using (StringReader srt = new StringReader(XSLsw.ToString())) // xslInput is a string that contains xsl 
      using (StringReader sri = new StringReader(XMLOutput)) // xmlInput is a string that contains xml 
      { 
       using (XmlReader xrt = XmlReader.Create(srt)) 
       using (XmlReader xri = XmlReader.Create(sri)) 
       { 
        XslCompiledTransform xslt = new XslCompiledTransform(); 
        xslt.Load(xrt); 
        using (StringWriter _sw = new StringWriter()) 
        using (XmlWriter xwo = XmlWriter.Create(_sw, xslt.OutputSettings)) // use OutputSettings of xsl, so it can be output as HTML 
        { 
         xslt.Transform(xri, xwo); 
         output = _sw.ToString(); 
        } 
       } 
      } 
      writer.Write(output); 
      Response.Flush(); 
      Response.End(); 
     } 
+0

これで、@importへのCSSリンクが変更されました。これを修正したようです。 Jordan

答えて

1

にXHTMLを生成するために使用するコードです。代わりに、整形式のXHTMLドキュメントを作成するには、必ずあなたのXSLTがルート<xsl:stylesheet>または<xsl:transform>要素の子として次のものが含まれています

<xsl:output method="xml" omit-xml-declaration="yes" /> 
+0

実際には、私のxsltシートに、変換時にContentTypeがtext/htmlになるようにする必要があるように見えます。 あなたが示唆したように出力を変更したとき、適切なHTMLを生成するように見えましたが、何らかの理由でページレイアウトに重大な影響を与えました... – Jordan

+0

ブラウザはおそらく、存在の有無に基づいてクォークスモードからスタンダードモード、 ''を出力します。 –

0

私は/ HTMLをテキストにXSLシート上のコンテンツタイプを設定する必要がありましたすべての問題が修正されました。

この変更は、サーバー側を変換する場合にのみ使用されます。クライアントへの変換のためにクライアントに送信するときには、それはtext/htmlに変更されません

関連する問題