天道酬勤,学无止境

SharePoint:呈现而不是下载 XML 文件(SharePoint: render, rather than download, XML file)

问题

我目前正在尝试将基于 XML/XSLT 的网站移至 SharePoint。 基本上,现有站点由大量 XML 文件组成,每个文件都引用(通过 xml-stylesheet)一个 XSLT 文件,该文件将 XML 转换为完整的 HTML 文件(包括<html><head><body>等.)

我目前正在尝试做的只是将现有站点转储到 SharePoint 文档库中,让 SharePoint 控制版本控制、访问权限等,但继续让 IE 将每个 XML 文件呈现为完整的 HTML 页面。 但是,当我尝试查看 XML 文件时,SharePoint/IE 只是尝试下载源代码,而不是呈现它。 我怎样才能解决这个问题?

(此外,任何有关更多 SharePointy 方法的建议将不胜感激。我曾尝试使用 XML 查看器 Web 部件,但无法正确呈现;将这些 XML 页面中的每一个都变成SP Wiki 页面,但本质上需要手动完成很多工作;页面查看器 webpart 也有同样的问题,因为它会尝试下载文件而不是显示文件。)

回答1

您必须创建一个从 dataform webpart 扩展的自定义 webpart

http://blogs.msdn.com/b/joshuag/archive/2008/03/14/using-xslt-in-your-sharepoint-web-part.aspx

回答2

好吧,更多的谷歌搜索使我想到了以下几点:

http://code-journey.com/2011/01/08/sharepoint-2010-download-file-instead-of-opening-in-browser-pdf-xml-html-etc-x-download-options-header-麻烦/

基本上,SharePoint 有自己的 HTTP 标头,它告诉 IE8 下载文件而不是打开它。 不幸的是,它只是一个开/关选项,所以没有选择只对 XML 文件进行更改。


但我最终做的是在服务器上将XML 渲染为 HTML,使用类似的方法。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • SharePoint: render, rather than download, XML file
    I'm currently trying to move an XML/XSLT-based website into SharePoint. Basically, the existing site consists of a load of XML files, each of which references (via xml-stylesheet) an XSLT file, which transforms the XML into a full HTML file (including <html>, <head> and <body> etc.). What I'm trying to do at the moment is just to dump the existing site into a SharePoint Document Library, let SharePoint control versioning, access rights etc, but continue to have IE render each XML file into complete HTML pages. However, when I try to view the XML file, SharePoint/IE just tries to download the
  • Safari 7.1 中的 ASPMenu 无法在 SharePoint 2010 中正确呈现(ASPMenu in Safari 7.1 Not Rendering Properly in SharePoint 2010)
    问题 有没有其他人遇到过 Mac 和 iOS8 上最新版本的 Safari 7.1 会破坏 SharePoint 2010 中的 ASPMenu 控件的问题? ASPMenu 之前工作正常,但现在更新后它决定不正确地呈现内容。 我已经尝试设置 Page.ClientTarget = "uplevel",并修改 compat.browser 文件以包含用于 Safari 的适配器“System.Web.UI.WebControls.Menu”,但这两个选项都无法帮助解决问题。 任何人都可以帮忙吗? 在 Safari 更新之前,菜单运行良好。 谢谢! 回答1 终于弄清楚是什么问题了。 过去,服务器看到的 Safari 浏览器 ID 是“Safar1Plus”。 这与 compat.browser 文件中列出的条目相关: <browser id="Safari2" parentID="Safari1Plus"> <controlAdapters> <adapter controlType="System.Web.UI.WebControls.Menu" adapterType="" /> </controlAdapters> </browser> Safari 7.1 不再与此浏览器 ID 相关联,现在已更新为“Safari60”。 我通过在我的自定义 SharePoint 页面上的
  • Sharepoint 2013 计算字段作为超链接呈现为文本(Sharepoint 2013 calculated field as hyperlink renders as text)
    问题 我在 Sharepoint 2013 中有一个列并将类型设置为“计算”。 我已将数据返回类型设置为整数(附图片),以便该字段是超链接。 在所有环境(开发和生产)和浏览器(chrome、firefox、IE)中,所有这些都运行了一年多,直到最近用户报告超链接不再可点击并显示为文本(附图片)。 检查元素,揭示被视为文本的值。 我花了一些时间来简化公式、删除字段并使用一个简单的元素导航到 google,但还没有找到解决方案。 我怀疑可能有一个 Sharepoint 更新,它以不同的方式处理公式,在用双引号包围它的元素内创建文本。 回答1 经过研究,我找到了问题的原因和解决方案。 原因 SharePoint 更新删除了计算字段设置标记的功能,并在处理 SharePoint 计算字段中的 HTML 标记中进行了说明。 解决方案 我找到了 JSLink 的解决方案。 打开上面的链接后,有一些使用 JSLink 的例子。 通过一些尝试,我设法将计算字段作为超链接。 步骤很简单。 使用代码创建一个 js 文件 - 在我的情况下,我创建了一个超链接,该超链接发布到另一个列表,其中包含当前项目的值。 复制js文件的链接位置。 在视图中的 Web 部件上引用 js 文件,在其他部分下。 瞧! 注意:在脚本中,字段名称必须是内部字段名称,这让我慢了很多。 要获取内部字段名称,打开列表设置
  • 无法使用 Internet Explorer 在 SharePoint 2010 中打开 PDF 文件(Can't open PDF files in SharePoint 2010 with Internet Explorer)
    问题 所以我们无法在我们的 SP2010 站点的浏览器中打开 .pdf。 我在中央管理中将设置设置为允许浏览器文件处理。 然后我发现有一个错误,如果站点是从自定义模板创建的,则上传到该站点的 pdf 文件仍会提示保存或取消。 我在服务器上运行了一个修补程序 http://support.microsoft.com/kb/2459108 考虑以下场景: 您可以在 SharePoint 2010 管理中心的常规设置页面中将 Web 应用程序的浏览器文件处理设置为许可。 您创建一个文档库,然后上传一个 html 文档。 您在浏览器中打开 html 文档。 注意 不会提示您下载 html 文档,它会在浏览器中呈现。 当您将 SharePoint 网站另存为模板时,您选择包括内容。 您可以使用该模板在同一 Web 应用程序中创建新的 SharePoint 网站。 在这种情况下,新站点中文档库的浏览器文件处理列表设置设置为严格。 此外,当您打开 html 文档时,系统会提示您下载该文件。 现在,当我用 firefox 单击 pdf 时,我可以直接打开它,但是使用 Internet Explorer(8 和 9,默认设置)我仍然无法打开,这里有什么解决方案? 编辑:也许它总是在 Firefox 中工作,无论如何,当我创建一个新库时,它会按预期工作。 如何在所有库上运行此设置? 回答1
  • SharePoint 错误:服务器不允许大于 2097152 字节的消息(SharePoint Error: The server does not allow messages larger than 2097152 bytes)
    问题 我有指向 sharepoint 2013 Office 365 的 Web 服务。我使用客户端对象模型。 我正在尝试更新其中存储 4 个附件的 xml 文件。 当我在 xml 文件中有大量二进制数据时执行此操作时,我收到以下错误: 信息 请求消息太大。 服务器不允许大于 2097152 字节的消息。 我意识到我可能不得不将附件与 xml 文件分开,但目前我的 infopath 表单将它们存储在那里。 有没有办法可以增加请求长度,或者可以分块保存或其他东西。 我真的只是修改了一个节点,除非我更新 xml,否则它不会工作。 谢谢 。 代码如下。 我的代码: ListItem docReq = GetDocRequestLight(docRequestID, businessID); string fPath = (string)docReq["FileRef"]; using (FileInformation fInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(ctx, fPath)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fInfo.Stream); XmlNamespaceManager xmlNameSpaceMgr = new
  • 跨多个网站集扩展 SharePoint 面包屑导航(Extending SharePoint Breadcrumbs across multiple site collections)
    问题 我一直试图找到一种方法来跨多个网站集扩展 SharePoint 面包屑,但一直找不到方法。 我可以在网站集上设置门户网站连接设置以链接到其父网站集。 但是,这不会只显示一个父网站集。 这是我正在创建的设置类型的示例。 根站点 Intranet 有一个称为站点的管理路径。 在网站下,有一个名为HR 的网站集,位于/sites/hr/ 。 在 HR 下还有另一个管理路径设置,称为外展。 在外展中有一个名为Recruiting的网站集,位于/sites/hr/outreach/recruiting/ 。 因此,当用户在招聘网站时,我希望他们看到Intranet > HR > Recruiting作为面包屑路径。 作为站点地图的示例: <?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"> <siteMapNode title="Intranet" url="http://intranet/Pages/Default.aspx"> <siteMapNode title="HR" url="http://intranet/sites/hr/default.aspx"> <siteMapNode title=
  • Sharepoint 2013/2016 计算列停止计算(Sharepoint 2013/2016 Calculated Column stops calculating)
    问题 我在 SharePoint On-Premises 中有一个计算列,它显示截止日期之前的天数,该列可以完美运行一天左右,然后停止计算,但是如果我转到列表设置并单击该列并单击确定,则它会计算再次? 有没有人遇到过类似的问题。 我在 2013 年都遇到了这个问题,但在几周内转移到 2016 年,仍然是同样的问题。 我试过“”空白和“”空白,所以不确定这是否是导致问题的原因? 是不是公式有问题? 这是公式: =IF(ISBLANK([Due Date])," ", IF(ISERROR(DATEDIF(NOW(),[Due Date],"d"))," ",DATEDIF(NOW(),[Due Date],"d"))) 回答1 计算列不能包含 volatile 函数,其中包括那些依赖于当前日期的函数。 SharePoint 列中的值——甚至在计算列中——都存储在 SharePoint 的基础 SQL Server 数据库中。 计算列中的计算不会在页面加载时执行; 相反,它们仅在项目发生更改时(在这种情况下,仅为该特定项目重新计算公式),或在列公式发生更改时(在这种情况下,为所有项目重新计算公式)时才重新计算。 如果您需要显示随时间推移而变化的动态值,您有几种选择。 客户端渲染 考虑使用客户端呈现,它允许您使用 JavaScript 来动态确定列表视图中记录的显示方式。 此
  • 通过 Powershell 在没有 SharePoint 模块的情况下列出 SharePoint 库中的文件(Listing files in SharePoint library without SharePoint module via Powershell)
    问题 我们在 Exchange 服务器 (Exchange 2010/Win 2008 R2) 上运行了一个 powershell 脚本,它需要查询 SharePoint 2013 中的 SharePoint 文档库以查找名称每天都可能不同的文件。 例如, Stats_2015_10_14_06_00_01.csv 或 Stats_2015_10_15_06_05_01.csv 这使我无法对文件名进行硬编码并使用 System.Net.WebClient 方法在本地下载文件。 我也没有在 Exchange 服务器上安装 SharePoint 模块,当然那里的管理员不想安装它。 我尝试将基于 HTTPS 的共享点站点名称转换为基于 UNC (\...) 的名称,但这似乎只适用于我的 Windows 8 笔记本电脑......但在 Exchange 服务器上失败了。 有什么建议么? 回答1 使用 New-WebServiceProxy 调用 Lists.asmx 网络服务。 就像是: $listname = "Documents" $query = "<Query> <Where> <Lt> <FieldRef Name="ID" /> <Value Type="Counter">3</Value> </Lt> </Where> </Query>" $queryOptions = ""
  • 如何显示 SharePoint 为 Web 部件返回的 XML?(How to display XML returned by SharePoint for web parts?)
    问题 最近,我通过修改用于显示各种 Web 部件的 XSL,在 SharePoint 中做了很多自定义样式。 了解实际的 XML 是什么样子,包括哪些元素具有实际值,在使用 XSL 时真的很有帮助。 我发现了一种在使用 Ontolica Web 部件时显示此 XML 的方法,但在使用 SharePoint 随附的默认 Web 部件时却没有。 那么,有没有办法以编程方式或简单地通过向 URL 添加参数来做到这一点? 我真的可以使用这样的工具,如果我能确定它是否可能,我会对开发一个作为 OSS 的工具感兴趣。 回答1 正如 Ryan 所暗示的那样,并非所有(实际上几乎没有)使用 XML/XSLT 来呈现其输出。 它是一个完整的组合,包括硬编码、CAML 和 XSLT,具体取决于 Web 部件。 因此,您将无法以这种方式可靠地解决问题。 但是,Vincent Rothwell 有一个名为 ARF 的工具包,它包含自己的控件,可使用 XML/XSLT 呈现 SharePoint 输出。 它是为发布站点而设计的,但声明它也可以在 WSS 下运行。 源代码也可用,因此您可以增强其中的内容或使用您自己的控件扩展工具包。 我强烈建议研究这个,因为 Vincent 有一个很棒的博客并且似乎了解他的东西。 回答2 您可以使用这个简单的 XSL 模板来转储输入的 XML: <xsl:template
  • 如何使用CSOM从SharePoint 2013下载文件/向SharePoint 2013上传文件?(How to download/upload files from/to SharePoint 2013 using CSOM?)
    问题 我正在开发Win8(WinRT,C#,XAML)客户端应用程序(CSOM),该应用程序需要从SharePoint 2013下载文件或将文件上传到SharePoint 2013。 我该如何下载/上传? 回答1 上传一个文件 使用File.SaveBinaryDirect方法将文件上传到SharePoint网站(包括SharePoint Online): using (var clientContext = new ClientContext(url)) { using (var fs = new FileStream(fileName, FileMode.Open)) { var fi = new FileInfo(fileName); var list = clientContext.Web.Lists.GetByTitle(listTitle); clientContext.Load(list.RootFolder); clientContext.ExecuteQuery(); var fileUrl = String.Format("{0}/{1}", list.RootFolder.ServerRelativeUrl, fi.Name); Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext
  • 在 Python 中下载 Sharepoint Excel 文件(Download Sharepoint Excel File in Python)
    问题 我正在尝试使用 Python 脚本从 SharePoint 存储库下载 Excel 文件。 我正在使用 https://github.com/vgrem/Office365-REST-Python-Client 示例中定义的 Office365-Rest-Python-Client,我可以访问我需要的所有文件/目录。 当我想下载任何文件时,问题就出现了。 我尝试了几种方法,但都没有奏效: wget.download("https://shprepos.com/path/file.xlsx", local_path, bar=None) 但我收到“403 FORBIDDEN”错误。 我也尝试过请求: req = requests.get(ruta, auth=requests.auth.HTTPBasicAuth(username, password), headers=headers) with open(local_file, 'wb') as file: file.write(req.content) 使用此代码,我得到的是网页,而不是 excel 文件,我不明白为什么,因为如果我使用正确的身份验证访问网址“https://shprepos.com/path/file.xlsx”我下载文件。 您知道使用身份验证通过 wget 下载该文件的方法吗? 或者我在
  • 将 SharePoint 站点数据导入 R(Import SharePoint site data into R)
    问题 我遇到了一个公共数据集,我不知道如何直接进入 R。 通常,我使用以下 R 代码从网络中提取数据: temp <- tempfile() download.file("http://www.webaddress.com",temp) data <- read.csv(unz(temp, "name_of_file")) unlink(temp) 但是,这个 SEC 站点让我对如何将其直接导入 R 感到有些困惑。一个原因是,当您右键单击链接而不是网址时,您会得到以下代码: javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$cphMain$lnkSECReport", "", false, "", "Content/BulkFeed/CompilationDownload.aspx?FeedPK=37264&FeedType=IA_FIRM_SEC", false, true)) 这是网址:http://www.adviserinfo.sec.gov/IAPD/InvestmentAdviserData.aspx 有没有办法将这些数据直接输入到 R 中? 到目前为止,我下载然后用 7-zip 打开,保存到 excel,然后导入到 R。 更新代码 library(httr)
  • Sharepoint 上的 WebPart 在本地下载文件 - 我需要将其发送给客户端(WebPart on Sharepoint downloads a file locally - I need to send it to the client)
    问题 请帮我在使用 Sharepoint 站点的机器上下载文件,而不是有 sharepoint 服务器的机器。 public class WebClientBL { static WebClient client_ = new WebClient() { Credentials = CredentialCache.DefaultNetworkCredentials }; public static void DownloadToClient(string path_in_sp, string path_in_local) { try { client_.DownloadFile(path_in_sp, path_in_local); } catch (Exception ex) { } } }
  • Excel VBA 从多个 SharePoint 文件夹上传/下载(Excel VBA Up-/Download from multiple SharePoint folders)
    问题 我在 Internet 上找到了使用 VBA 从 SharePoint 文件夹下载文件的示例代码(在资源管理器中打开,映射到驱动器号等) 因此,我编写了以下代码: Dim sharepointFolder As String Dim colDisks As Variant Dim objWMIService As Object Dim objDisk As Variant Dim driveLetter As String 'Create FSO and network object Set objNet = CreateObject("WScript.Network") Set fs = CreateObject("Scripting.FileSystemObject") 'Get all used Drive-Letters Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2") Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk") 'Loop through used Drive-Letters For Each objDisk In colDisks For i = 65 To 90 'If
  • Spring 是否支持 SharePoint(Does Spring support SharePoint)
    问题 Spring 是否支持 SharePoint? 在我的 Spring 应用程序中,我想在 ShaePoint 中保存数据。 在我们的另一个 (java) 应用程序中,我们使用 CAML 来读取/更新 SharePoint 中的数据。 您认为我应该使用相同的(CAML)还是 Spring 提供了任何使我的工作变得轻松的 API。 谢谢你 :) 编辑:它的 SharePoint 2003 和 WSS 2.0 回答1 使用您的 Java 应用程序,您应该能够将 XML 发送到 SharePoint Web 服务。 检查 WSS 3.0 Web 服务 SDK 的链接:WSS 3.0 Webservices SDK (MSDN) 回答2 AFAIK SharePoint 还应该支持 HTTP GET/POST 来读取/写入数据。 但是,根据我自己的经验,从 Java 读取/保存数据到 SharePoint 通常涉及身份验证级别的问题。 事实上,SharePoint 通常使用 NTLM 身份验证,这在 Java 中很难实现。 过去,我使用 HttpClient 进行了一些实验,并按照此处所述实现了 NTML 身份验证,这需要 jCIFS。 另一个更快但更脏的选项如下。 由于 SharePoint 最终将文件存储在文件系统上,因此只需将该路径公开为 Windows UNC 路径
  • Office365----Sharepoint online overview
    很多客户问我们,office365是不是提供了云端备份的功能?其实这么说也不是完全不正确的,但是我们还是会纠正客户,office365提供的并不是备份的功能,而是在sharepoint online提供了文件存储在云端,从而达到可与本地同步、与他人同步和协作的效果。对于很多企业来讲,一定会有共享文件的需求,要么放在本地服务器上,要么放在第三方的云端。本地服务器自不用讲,基本上也就是个存储加简单的共享,在第三方比较有争议。其实某种程度上,如果站在云盘的角度,很多第三方的应用其实比one drive更好用,无论是本地与云端的链接,还是与他人的共享,都非常方便。那既然如此,用户为何还要选择sharepoint online呢?那我们就来看下,到底sharepoint online除了可以起到云盘的功能,还能做什么。 首先,在2014年1月份之前,sharepoint online是提供外部门户网站的功能的,企业可以把类似放在外网托管的网站放到365上面来。关于迁移也不复杂,如果是静态网站,直接把图片文字放过来即可;如果是动态网站,绝大部分基于asp.net语言开发的且后台无复杂数据库的网站,可以直接迁移过来,但如果是java,php等语言开发的需要重新编译。但是在2014年1月之后,这个功能停止服务了。大概的原因应该如下:Azure上提供了website的服务
  • 使用R从Sharepoint访问Excel文件(Accessing Excel file from Sharepoint with R)
    问题 我正在尝试编写一个R脚本,该脚本将访问存储在我公司的Sharepoint页面上的Excel文件,以便我可以进行一些计算并绘制结果。 我尝试了多种方法来做到这一点(download.file,RCurl getURL(),gdata),但是我似乎无法弄清楚该怎么做。 网址是HTTPS,并且应该输入用户名和密码。 我用以下代码得到了最接近的代码: require(RCurl) URL<-"https://companyname.sharepoint.com/sites/folder/_layouts/15/WopiFrame.aspx?sourcedoc={2DCC2ED7-1C13-4910-AFAD-4A9ACFF1C797}&file=myfile.xlsx&action=default' f<-getURL(URL,verbose=T,ssl.verifyhost=F,ssl.verifypeer=F,userpwd="mylogin:mypw") 这似乎可以连接(尽管用户名和密码似乎无关紧要)并返回 > f [1] "<html><head><title>Object moved</title></head><body>\r\n<h2>Object moved to <a href=\"https://companyname.sharepoint.com/sites/
  • 以编程方式将 > 5 MB 的文件上传到 sharepoint 2013(Upload > 5 MB files to sharepoint 2013 programmatically)
    问题 我在将大文件上传到我的 sharepoint 2013/office 365 站点时遇到问题。 我使用的是 Visual Stuidos 2010 和 .NET 4.0 我已经尝试过这些问题的代码: SP2010 客户端对象模型 3 MB 限制 - 未应用更新 maxReceivedMessageSize sharepoint 中的最大文件上传大小 通过 c# Web 服务将大文件 100mb+ 上传到 Sharepoint 2010 如何使用 CSOM 从/向 SharePoint 2013 下载/上传文件? 但没有任何效果。 所以我需要一点帮助。 这是我尝试过的代码: 1:(我也尝试使用SharePointOnlineCredentials而不是NetworkCredential来实现这一点) #region 403 forbidden byte[] content = System.IO.File.ReadAllBytes(fileInfo.FullName); System.Net.WebClient webclient = new System.Net.WebClient(); System.Uri uri = new Uri(sharePointSite + directory + fileInfo.Name); webclient.Credentials =
  • 从 SharePoint 下载文件(Download file from SharePoint)
    问题 我正在使用 SharePoint 的 REST API 来查询企业用户的 Office 365 SharePoint 网站内托管的文件。 我已使用 OAuth 对用户进行身份验证并授权应用程序,如下所述:http://msdn.microsoft.com/en-us/library/azure/dn645542.aspx 我能够通过 GET 请求成功查询 API:https://XXXXXXX.sharepoint.com/sites/xxxxx/xxxxx/myfoldername/_api/files(作为 Authorization 标头的请求设置为“Bearer”,因为您期待。) 上面的查询给了我以下 JSON 结果: { "odata.metadata" = "https://xxxxxxxxx.sharepoint.com/sites/xxxxxxxxx/xxxxxxxxx/myfoldername/_api/$metadata#SP.ApiData.Files"; value = ( { CreatedBy = { Id = 1; Name = “Test”; Puid = xxxxx; }; ETag = “\”{hsdglksjfldkasnfldasknk},4\””; Id = JKLBbiuuu908yYHhh89YBn9n9ynynYUN
  • 如何从 Sharepoint 2010 功能事件接收器中的 XML 文件中检索数据?(How to retrieve data from an XML file in a Sharepoint 2010 Feature Event Receiver?)
    问题 我正在关注本教程,并且正在尝试在事件接收器中设置代码。 我需要 2 个属性将 SPWeb 和字符串发送到他们的方法中。 public override void FeatureActivated(SPFeatureReceiverProperties properties) { // is there a way to make this non hardcoded? SPSite site = new SPSite("http://localhost.com"); SPWeb web = site.OpenWeb("/"); string XMlPath = // get xml file path CreateGroups(web, path); } private void CreateGroups(SPWeb currentSite, string groupsFilename) { } 所以我尝试使用 getFullPath 但这没有用。 我也尝试使用 MapPath,但我似乎无法访问它。 那么如何获取 XML 文件(我认为这就是我需要的)? 回答1 您需要处理 SPSite / SPWeb 对象,这通常在using子句中完成。 您不需要在功能接收器中使用绝对路径(硬代码),因为该功能已经在网站/站点范围内你的XmlPath通常需要指向 Sharepoint