Функция документа XSLT с относительным URI для разрешения http или https - PullRequest
0 голосов
/ 16 августа 2011

Это вопрос из двух частей:

1) Я использую функцию документа XSLT для получения XML из конечной точки REST во время преобразования.Это прекрасно работает, если я добавлю схему в URI, то есть document('http://...').Тем не менее, окончательный выпуск сайта, над которым я работаю, может быть защищенным или недоступным (https).Чтобы компенсировать это, можно ли использовать относительный URI, например, document('//...') в функции документа XSLT, как если бы вы использовали другие ресурсы, такие как изображения и т. Д.?

Я пытаюсь сделать это с помощьюнативный .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), которая вызывает проблемыможет возникнуть.Это действительная проблема, или трансформация произойдет независимо?

1 Ответ

1 голос
/ 16 августа 2011

Я тестировал на 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 модуля таблицы стилей,который можно настроить с помощью перегрузки загрузки , которая принимает экземпляр XmlReader , и с помощью одного из создания перегрузок , которые принимают параметр baseUri.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...