Примените XSL к внешнему XML

РЕДАКТИРОВАНИЕ: Теперь я перечитал вопрос...

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

public void Add(string key, List list)

(Сам набор не был бы быть универсальным - если Вы не хотели сделать ключевой тип универсальным.)

Вы не могли извлечение значения от него способом со строгим контролем типов, хотя, потому что компилятор не будет знать, какой тип Вы использовали для конкретного ключа. При создании ключа самим типом Вы заканчиваете немного лучшая ситуация, но тот, который все еще не поддерживается существующими наборами. Это - ситуация, на которую отвечал мой исходный ответ.

РЕДАКТИРОВАНИЕ: Исходный ответ, когда я не вполне считал вопрос правильно, но который может быть информативным так или иначе...

нет, Вы не можете заставить один аргумент типа зависеть от другого, я боюсь. Это - только одна из вещей, которые можно было бы хотеть выразить в универсальной системе типов, но которые не допускают ограничения.NET. Там всегда будут такими проблемами, и разработчики.NET приняли решение сохранить дженерики относительно простыми.

Однако можно записать набор для осуществления его довольно легко. Я имею пример в сообщении в блоге , который только сохраняет единственное значение, но было бы легко расширить это для использования списка.

12
задан Mads Hansen 27 September 2009 в 19:14
поделиться

4 ответа

Вы не можете добиться этого с помощью "чистого" xml + xslt (*). Некоторый внешний код должен будет идентифицировать xml и xslt, который должен его преобразовать.

Поскольку вы, кажется, трансформируете XML, я предполагаю, что вы делаете это в веб-браузере.

Вы можете сделать это используя javascript, как продемонстрировано на w3schools . Однако междоменные ограничения по-прежнему применяются, если вы выполняете запросы на основе javascript (например, AJAX / XHR): если исходный сервер не устанавливает соответствующие заголовки CORS, чтобы разрешить междоменный доступ к javascript, вам необходимо прокси этот xml-запрос через ваш собственный сервер.

(*): Ответ Mad использует ссылки на сущности для умного встраивания внешнего xml в содержащий документ. Однозначно стоит попробовать, но имейте в виду, что этот вид включения на основе сущностей использовался в нескольких утечках, связанных с раскрытием информации, поэтому он часто не включается в синтаксическом анализаторе xml (в частности, это не должно подрывать CORS в браузере). Вам просто нужно попробовать это в вашей ситуации.

2
ответ дан 2 December 2019 в 07:22
поделиться

Если вы пытаетесь запустить XSLT внутри .NET, вы можете легко использовать для этого класс XslCompiledTransform в .NET.

Если вы пытаетесь запустить это, например, на В командной строке есть набор инструментов, которые вы можете использовать для применения XSLT-файла к заданному XML-файлу - обычно тот, который находится на вашем локальном жестком диске.

См., например, веб-сайт Олега Ткаченко для информации о NXSLT ] и другие инструменты XSLT, или см. эту статью CodeProject для расширения оболочки Windows, чтобы применить XSLT к заданному XML-файлу (на локальном жестком диске).

Надеюсь, это немного поможет.

Марк

3
ответ дан 2 December 2019 в 07:22
поделиться

Вы можете создать локальный XML-файл, который включает XML-содержимое удаленного XML-файла через ссылку на объект .

В приведенном ниже примере показано содержимое удаленного XML-файла внутри элемента документа оболочки .

Затем вы можете включить инструкцию по обработке таблицы стилей в свой локальный XML-файл.

Однако, поскольку локальный файл имеет элемент документа оболочки , вам может потребоваться указать на «оболочку XSLT», которая использует xsl: import для импорта исходного XSL.xsl и apply-templates , начиная с содержимого внутри элемента оболочки .

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wrapper [
<!ENTITY content SYSTEM "http://stackoverflow.com/feeds">
]>
<?xml-stylesheet type="text/xsl" href="XSL.xsl" ?>
<wrapper>
    &content;
</wrapper>
14
ответ дан 2 December 2019 в 07:22
поделиться

Вы можете написать локальный файл XML в качестве обертки:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="XSL.xsl" ?>
<wrapper Source="http://www.externaldomain.com/rss.xml"/>

и продлить свой стилью, чтобы он понимал обертку:

<xsl:template match="wrapper">
  <xsl:apply-templates select="document(./@Source)"/>
</xsl:template>

Я не тестировал его с файлами XML по HTTP, но это Работает с локальными файлами XML, которые я не хочу меняться включать в себя инструкцию обработки XML-стилейной липы. Он работает MIT Firefox, Opera и IE (7, я не пробовал другие версии)

2
ответ дан 2 December 2019 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: