Существует ли концепция Java URIResolver в С# и .NET?
В пакете преобразования Java XML существует концепция, называемая URIResolver, которая представляет собой объект, реализующий этот интерфейс который может быть вызван процессором, чтобы включить URI, используемый в документе(), xsl: import или xsl: включить в объект Source. "
Итак, если у вашего XSL есть импорт вроде этого
<xsl:import href="URI"/>
Это позволяет вам отображать URI и сопоставлять его с Source по вашему выбору - возможно, это происходит из базы данных, или, может быть, вы хотите сопоставить URI с другим URI. Это может быть полезно, поскольку вы не можете использовать xsl:variable
в xsl:import href
.
Вот пример кода Java, который создает трансформатор и выполняет преобразование.
URIResolver uriResolver = new MyURIResolver(); // sample
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setURIResolver(uriResolver);
Transformer transformer = transformerFactory.newTransformer();
transformer.setURIResolver(uriResolver);
transformer.transform(xml, result);
Обратите внимание: в коде, где используется URIResolver, есть два места:
- TransformerFactory
setURIResolver -" Установить объект
который используется по умолчанию во время
преобразование для разрешения используемых URI
в документе(), xsl: import или
xsl: include. "
- Трансформатор setURIResolver -" Set
объект, который будет использоваться для
разрешить URI, используемые в документе().
Вопрос: Есть ли аналогичная концепция для Java URIResolver в С# и .NET?
Ответы
Ответ 1
Да, он называется XmlResolver
.
XmlResolver
является одной из абстракций System.Xml
, что означает, что вы можете использовать его в различных API-интерфейсах, таких как XslCompiledTransform
, XmlDocument
, XmlReader
(через XmlReaderSettings
) и т.д.
Здесь более подробно описано, как это работает, и как вы можете реализовать свой собственный преобразователь.
По умолчанию эти различные API используют XmlUrlResolver
, который может разрешать URI, начинающиеся с http://
и file://
.
Кроме того, для разрешения внешних объектов вы можете переопределить метод ResolveEntity
в XmlReader
.
Ответ 2
Да, аналог существует.
IXmlNamespaceResolver
а также XmlNamespaceManager, который реализует интерфейс.
@Lame Duck, я думаю, вы неправильно поняли вопрос.