Существует ли концепция 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, я думаю, вы неправильно поняли вопрос.