【问题标题】:ASP.NET xslt transformationASP.NET xslt 转换
【发布时间】:2014-05-22 16:47:12
【问题描述】:

所以我使用下面的代码进行 xslt 转换。但我对 ASP.NET 开发还很陌生,所以这些错误有点误导。此代码正在生成一个错误,指出它不理解物理路径而只理解虚拟路径。什么是虚拟路径,如何从指定的物理路径创建?

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="ViewerASP.SiteMaster" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Xml.Xsl" %>
<%@ Import Namespace="System.Xml.XPath" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head runat="server">
    <title>Viewer</title>
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
    <script language="C#" runat="server">
        public void Page_Load(Object sender, EventArgs E) {
            string xmlPath = Server.MapPath("physicaladdresshere");
            string xslPath = Server.MapPath("physicaladdresshere");
            //Instantiate the XPathDocument Class
            XPathDocument doc = new XPathDocument(xmlPath);
            //INstantiate the XslTransform Class
            XslTransform transform = new XslTransform();
            transform.Load(xslPath);
            //Custom format the indenting of the output document using XmlTextWriter
            XmlTextWriter writer = new XmlTextWriter(Response.Output);
            writer.Formatting = Formatting.Indented;
            writer.Indentation=4;
            transform.Transform(doc,null,writer);
        }
    </script>
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
</head>
        <div class="main">
            <asp:ContentPlaceHolder ID="MainContent" runat="server"/>
        </div>
</body>
</html>

【问题讨论】:

  • 您的physicaladdresshere 看起来如何?是相对的还是绝对的?如果相对 - 到什么目录?
  • 作为一个例子,它看起来像这样:C:\Users\kyle\Desktop\file.xml。我尝试对此进行硬编码,但它给了我关于无效转义字符序列的错误,所以我将其更改为:C:\\Users\\kyle\\Desktop\\file.xml 并收到原始发布的错误。

标签: asp.net xslt


【解决方案1】:

Server.MapPath 将虚拟路径(即虚拟 IIS 目录中的路径)映射到服务器上的物理路径。显然你不需要那个,因为你已经有一个绝对的服务器端路径。只需删除这些Server.MapPath 调用:

string xmlPath = "C:\\Users\\kyle\\Desktop\\file.xml";
...

【讨论】:

  • 好吧,我想我遵循了。但是,如果我有一个用户浏览到他们的 xml 文件的 web 表单,这会起作用吗?我可以从中检索他们的本地路径吗?我正在尝试做我的转换客户端。
  • 哦,那恐怕根本行不通。您无法访问最终用户的文件系统——这将是一个巨大的安全漏洞。另请注意,C# 代码是在服务器上运行的,而不是在远程用户计算机上运行的。你能做的最好的就是给用户一个文件上传页面,他们上传文件,你在服务器端运行转换
  • 哦,好吧,我明白了。有一个asp服务器然后可以在本地运行吗?在添加/删除程序/功能下?反正有没有通过c#运行代码?所以我们必须创建一个网络服务器来接受上传的文件,然后返回那个 url?
  • @Kyle,无论如何你都需要一个网络服务器——这就是网络应用程序的工作方式。是的,实际过程可能是: 1 - 用户导航到页面,上传文件; 2 - 服务器运行转换; 3 - 用户会收到一个下载新文件的链接,或者可能只是在回复中立即获取文件。这只是一个选项 - 我不知道你的应用程序是关于什么的
  • 基本上整个想法是获取一个 xml 文件,应用 xsl 转换并返回该页面。我已经成功地完成了 python、java 和 Visual c#。但是,我们正在尝试制作可以在浏览器中运行的跨平台产品。
猜你喜欢
  • 2011-09-14
  • 2013-05-01
  • 1970-01-01
  • 2023-04-07
  • 2012-07-18
  • 2019-10-06
  • 2018-09-08
  • 2019-12-21
相关资源
最近更新 更多