【问题标题】:Asp.net web page visible in xml format in view page source but looks user friendly on browser?Asp.net 网页在视图页面源中以 xml 格式可见,但在浏览器上看起来用户友好?
【发布时间】:2010-12-06 21:52:18
【问题描述】:

请看这个示例链接地址:(weather.gov)

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

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

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

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

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

我的问题?

以 xml 格式输出网页对我来说很重要(在页面视图源中以 xml 格式可见)但对用户来说看起来很友好。

1.我如何在 asp.net 中做到这一点?

请指导我。我感谢任何示例应用程序、网址、代码或信息,以使其清晰。

谢谢。

【问题讨论】:

  • @cshaper2020:如果您精通 ASP.Net,那么您就知道人口模式的基础知识。 stackoverflow.com/questions/3529852/… 中的 XSLT 示例
  • @drachenstern- 不,还没有,..我有关于动态生成 xml 的问题..(我认为它与从 xmldatadocument 返回的 xml 页面的标题有关?我不知道为什么页面源在浏览器中不是 xml 结构的)...
  • 您引用的网页只是一个带有 XSLT 引用的 XML 文件。您需要阅读 XML 和 XSLT 并了解 XSLT 是一种标记,用于告诉 XML 如何自行准备。然后可以使用网站根据路由生成XML,提供一个好用的网站。
  • @drachenstern 作为一个简单的测试(在 ASP.NET、SQL 中),我使用了一个数据集来存储来自 DB 的数据,然后填写 XmlDataDocument。然后 XslCompiledTransform 和 XmlTextWriter 用于加载定义的 xsl.. 最后样式化的 xml 页面将使用 Response.OutputStream 发送到页面。运行页面后,似乎是使用 xsl 设置样式的 xml 页面,但我的主要问题仍然存在:当我在浏览器中查看页面源时,页面不是以 XML 格式结构化的..
  • 我相信你是时候分享一些代码了,所以我们可以复制。

标签: asp.net xml xslt


【解决方案1】:

查看源:http://140.90.113.200/latest_ob.xsl

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

【讨论】:

  • 谢谢 drachenstern。你知道这种在 asp.net 中呈现数据的方法叫什么名字吗?其实我想用asp.net和sql数据库。
  • 我不认为 asp.net 与此案有关。您正在获取一个 xml 文件和一个 xsl 文件,并使用 xslt 将两者结合起来。通过将 xslt 样式表添加到 xml 文档的顶部,当在 Web 浏览器中查看时,它会自动将两者结合起来。如果您想输出 xml,然后可以选择显示它,您应该考虑编写一个 wcf 服务来提供 xml。
  • @rtpHarry ~ 正是我要建议的。 @cshaper2020 我相信您只会使用 XML 数据上的 XSL 转换来调用它...我可以看到您对 XML 或 XSL 都不熟悉是吗?我建议你在这里阅读一些关于 XSL 和 XML 的 stackoverflow 的帖子。
  • 谢谢亲爱的朋友们.. rtpHarry 你说得对,我没有在 xsl 上进行实验。但是我想通过 asp.net 实现我的简单网站,所以问如何在 asp.net 中完成这部分。我的主要问题是访问 xml 格式的页面源中的网页数据。似乎唯一的方法是使用 xml xslt?在weather.gov/xml/current_obs/display.php?stid=KLAX,该网站使用查询字符串来显示相关数据。
  • @cshaper2020 - 我想我可能误解了你。您的实际要求是建立一个 asp.net 网站,然后将 xml 天气提要数据拉入其中吗?如果是这种情况,您谈论的是一组完全不同的技术,您应该在顶部更新您的问题,以便开发人员可以回答您。
【解决方案2】:

好的,.. 作为一个简单的测试(在 ASP.NET、SQL 中),我使用了一个数据集来存储来自 DB 的数据,然后填写 XmlDataDocument。然后 XslCompiledTransform 和 XmlTextWriter 用于加载定义的 xsl.. 最后样式化的 xml 页面将使用 Response.OutputStream 发送到页面。运行页面后,似乎是使用 xsl 设置样式的 xml 页面,但 我的主要问题仍然存在: Simple Database 是一个 SQL 数据库,其表包含 4 列:ID、姓名、年龄、电话 这是我的 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.below 是 当我运行它时该简单代码页的结果 并在 页面源代码 中查看(使用浏览器)它显示 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 中做(解决)这个问题?

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多