Существует ли концепция Java URIResolver в C # и .NET? - PullRequest
3 голосов
/ 03 июня 2009

В пакете преобразования Java XML существует концепция, известная как URIResolver , которая представляет собой «Объект, реализующий этот интерфейс, который может вызываться процессором для преобразования URI, используемого в document () , xsl: import или xsl: include в объект 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 в document (), xsl: import, или xsl: include. "
  • Трансформатор setURIResolver - "Набор" объект, который будет использоваться для разрешить URI, используемые в document (). "

Вопрос : Существует ли концепция, аналогичная Java URIResolver в C # и .NET?

Ответы [ 2 ]

3 голосов
/ 08 июня 2009

Да, это называется XmlResolver.

XmlResolver является одной из System.Xml абстракций, что означает, что вы можете использовать ее в различных API, таких как XslCompiledTransform, XmlDocument, XmlReader (через XmlReaderSettings), и т.д.

Вот более подробно о том, как это работает, и как вы можете реализовать свой собственный преобразователь .

По умолчанию эти различные API используют XmlUrlResolver, который может разрешать URI, которые начинаются с http:// и file://.

Кроме того, для разрешения внешних сущностей можно переопределить метод ResolveEntity по умолчанию на XmlReader.

0 голосов
/ 03 июня 2009

Да, аналог существует.
IXmlNamespaceResolver а также XmlNamespaceManager , который реализует интерфейс.

@ Хромая утка, я думаю, ты неправильно понял вопрос.

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