Asp.net网页在浏览页面源中以xml格式显示,但在浏览器上看起来用户友好?

时间:2010-12-06 21:52:19

标签: asp.net xml xslt

请查看此示例链接地址:(weather.gov)

http://140.90.113.200/xml/current_obs/KLAX.xml

如果您在浏览器中查看页面源,您可以看到它以XML格式显示数据(usng xsl。?)。

我需要实现这样一个简单的网页。

我认为该网站使用XML XSL ...

我将在asp.net中实现一个web应用程序,该应用程序将使用存储在sql数据库(或xml数据库或Web服务)中的数据,并像其他普通网站一样显示这些信息,但在xml格式中显示在不错的UI中(使用xsl?)。那个天气网站只是展示我想做什么的样本(我不会使用该网站的任何数据,我的应用程序是不同的。)我的要求是能够查看页面源仅以XML格式。现在我很清楚xsl是解决方案,但考虑在asp.net中使用此方法。(在动态asp.net页面中使用xml / xsl)< / p>

我的问题?

对我来说,以xml格式输出网页(在页面视图源中以xml格式显示)非常重要,但对用户而言看起来对用户友好。

1.我可以在asp.net中做到吗?

请指导我。我很感激任何示例应用程序,网址,代码或信息,以表明它。

感谢。

3 个答案:

答案 0 :(得分:3)

视图-出处:http://140.90.113.200/latest_ob.xsl

这应该可以帮助你了解你需要做什么,不是吗?

答案 1 :(得分:1)

确定,.. 作为一个简单的测试(在ASP.NET,SQL中),我使用数据集来存储来自DB的数据,然后填写XmlDataDocument。然后XslCompiledTransform和XmlTextWriter用于加载定义的xsl ..最后样式化的xml页面将使用Response.OutputStream发送到页面。运行页面后,似乎xml页面使用xsl设置样式,但我的主要问题仍然存在: Simple Database是一个SQL数据库,其表包含4列:ID,Name,Age,Phone 这是我的Default.aspx.cs (代码) - (我没有更改default.aspx的预定义设计)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Xml;
using System.Xml.Xsl;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
         SqlConnection Conn = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=TestDB;Integrated Security=SSPI;");
        Conn.Open();

        DataSet DS = new DataSet("TestDataSet");

        SqlDataAdapter DA = new SqlDataAdapter("SELECT TOP 1 * FROM TableTest", Conn);
        DA.Fill(DS, "Persons");

        Conn.Close();

        DS.EnforceConstraints = false;
        XmlDataDocument xmlDoc = new XmlDataDocument(DS);

        // Create a procesing instruction.  
        XmlProcessingInstruction newPI;

        String PItext = "<?xml version='1.0' encoding='utf-8'?>'";
        newPI = xmlDoc.CreateProcessingInstruction("xml-stylesheet", PItext);

        // Add the processing instruction node to the document.  
        xmlDoc.AppendChild(newPI);


        XslCompiledTransform xslTran = new XslCompiledTransform();
        xslTran.Load(MapPath("TestTransform.xsl"));
       // Response.ContentType = "text/xml;charset=UTF-8";
        XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8);

        xslTran.Transform(xmlDoc, null, writer);
        writer.Close();

    }
}

这是一个简单的XSL文件(TestTransform.xsl)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:str="http://xsltsl.org/string" version="1.0">

  <xsl:output method="html"/>
  <xsl:template match="Persons">
    <html>
      <head>
        <title>
         Simple Test : Information for : <xsl:value-of select="Name/text()"/>
        </title>

      </head>
      <style type="text/css">
        .label { font-weight: bold; vertical-align: text-top; text-align: right;}
        .xsllocation { font-size: 18px; color: white; font-weight: bold; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; }
      </style>
      <body bgcolor="#ddffff" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" background="/images/background1.gif">

        <table width="700" border="0" cellspacing="0">


          <td width="525" valign="top">
            <table cellspacing="2" cellpadding="0" border="0">
              <tr valign="top">
                <td>&#160;&#160;&#160;&#160;&#160;&#160;&#160;</td>
                <td width="100%" align="center">
                  <a name="contents" id="contents"></a>
                  <table style="margin-left: 10px;" align="left">



                    <xsl:variable name="name">
                      <xsl:value-of select="Name/text()"/>
                    </xsl:variable>
                    <xsl:if test="$name != 'NA' and $name != ''">
                      <tr>
                        <td class="label">Name is:</td>
                        <td>
                        <xsl:copy-of select="$name"/>
                      </td>
                      </tr>
                    </xsl:if>


                    <xsl:variable name="age">
                      <xsl:value-of select="Age/text()"/>
                    </xsl:variable>
                    <xsl:if test="$age != 'NA' and $age != ''">
                      <tr>
                        <td class="label">Age:</td>
                        <td>
                          <xsl:copy-of select="$age"/> years old
                        </td>
                      </tr>
                    </xsl:if>

                    <xsl:variable name="phone">
                      <xsl:value-of select="Phone/text()"/>
                    </xsl:variable>
                    <xsl:if test="$phone != 'NA' and $phone != ''">
                      <tr>
                        <td class="label">Phone Number:</td>
                        <td>
                          <xsl:copy-of select="$phone"/> 
                        </td>
                      </tr>
                    </xsl:if>
                  </table>
                </td>
              </tr>
            </table>
          </td>

        </table>
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

1.低于该简单代码页的结果当我运行并在页面源中查看(使用浏览器)时显示html标签(如body,td, ...):

<html xmlns:str="http://xsltsl.org/string"><head><title>
         Simple Test : Information for : Mr Abc              </title></head><style type="text/css">
        .label { font-weight: bold; vertical-align: text-top; text-align: right;}
        .xsllocation { font-size: 18px; color: white; font-weight: bold; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; }
      </style><body bgcolor="#ddffff" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" background="/images/background1.gif"><table width="700" border="0" cellspacing="0"><td width="525" valign="top"><table cellspacing="2" cellpadding="0" border="0"><tr valign="top"><td>       </td><td width="100%" align="center"><a name="contents" id="contents" /><table style="margin-left: 10px;" align="left"><tr><td class="label">Name is:</td><td>Mr Abc              </td></tr><tr><td class="label">Age:</td><td>32 years old
                        </td></tr><tr><td class="label">Phone Number:</td><td>345353232 </td></tr></table></td></tr></table></td></table></body></html>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>

    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZKwzWK/GivBcwTW8PWk8wUf8dacg" />
</div>

    <div>

    </div>
    </form>
</body>
</html>

但正如我之前所说,我需要让它看起来像提到的天气页面(请在浏览器中查看页面来源).. 这样的东西: * *我点击浏览器上的页面查看源...

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet href="TestTransform.xsl" type="text/xsl"?>
<Persons version="1.0"  
    <Name>Mr Abc</Name>
    <Age>32</Age>
    <Phone>345353232</Phone>    
</Persons>

问题是什么? 我怎么能在asp.net中解决这个问题?

答案 2 :(得分:0)

您需要使用XSLT进行XML转换的教程:

http://www.w3schools.com/xsl/xsl_transformation.asp