这是一个两部分问题:
1)我正在使用XSLT文档函数在转换期间从REST端点获取XML。如果我明确地将方案添加到uri,即document('http://...')
,这可以正常工作。但是,我正在处理的网站的最终版本可能会安全地访问,也可能不会安全访问(https)。为了弥补这一点,是否可以像在图像等其他资源中那样在XSLT文档函数中使用相对URI,即document('//...')
?
我正在尝试使用本机.NET XsltCompiledTransform
执行此操作并收到以下错误:"Invalid URI: The hostname could not be parsed."
这是.NET中的限制,可以使用Saxon或其他2.0处理器实现,还是只是没有可能的?
更新
抛出的异常是XsltTransformException
,内部UriFormatException
具有以下堆栈跟踪:
at System.Xml.Xsl.Runtime.XmlQueryContext.GetDataSource(String uriRelative, String uriBase)
at <xsl:template match="Nomination">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator {urn:schemas-microsoft-com:xslt-debug}current)
at <xsl:template match="/">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator {urn:schemas-microsoft-com:xslt-debug}current)
at Root(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime)
at Execute(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlSequenceWriter results)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer)
at System.Xml.Xsl.XslCompiledTransform.Transform(IXPathNavigable input, XsltArgumentList arguments, XmlWriter results, XmlResolver documentResolver)
at System.Xml.Xsl.XslCompiledTransform.Transform(IXPathNavigable input, XsltArgumentList arguments, XmlWriter results)
at AAFC.Web.XsltView.Render(ViewContext viewContext, TextWriter writer)
内部堆栈跟踪:
at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
at System.Uri.CreateUri(Uri baseUri, String relativeUri, Boolean dontEscape)
at System.Uri..ctor(Uri baseUri, String relativeUri)
at System.Xml.XmlResolver.ResolveUri(Uri baseUri, String relativeUri)
at System.Xml.XmlUrlResolver.ResolveUri(Uri baseUri, String relativeUri)
at System.Xml.Xsl.Runtime.XmlQueryContext.GetDataSource(String uriRelative, String uriBase)
2)我关注的是(我没有对此进行过测试,因此可能没有实际意义),如果安全访问最终站点(https)并且转换引用了不安全的REST端点(http)可能会出现问题。这是一个有效的问题,还是会发生转变?
答案 0 :(得分:1)
我在Powershell上测试过,URI解析工作正常:
PS C:\> $u = new-object Uri (new-object Uri "https://a.com"), "//b.com/"
PS C:\> $u.AbsoluteUri
https://b.com/
如果您使用相对URI作为文档函数的参数,则使用样式表模块的静态基URI解析,该静态基本URI可以使用接受Load overload的XmlReader进行自定义实例,并使用接受baseUri参数的Create overloads之一。