2009-09-03 3 views
0

Мне нужно передать информацию из другого источника и может иметь трансформацию между ними, но в зависимости от того, имеет ли исходный документ инструкцию обработки xml, я должен передать ее, и если это не так, я не должен ее передавать.Возможно ли включить/исключить инструкцию по обработке XML на основе ее присутствия в исходном документе?

Input 
<?xml version="1.0" encoding="UTF-8"?> 
<Source/> 

Output  
<?xml version="1.0" encoding="UTF-8"?> 
<Source/> 

Если он не имеет инструкцию по обработке, я не должен включить его в выходной, в основном для поддержки некоторых других устаревших программ, которые их не понимают (Дух!)

можно динамически переключаться стилей и использование декларация omit-xml, основанная на том, был ли ввод инструкцией, но есть ли способ сделать это в одной таблице стилей?

EDIT: Я не могу удалить преобразование, которое присутствует перед возвратом данных.

EDIT: Я только что прочитал, что, хотя это выглядит как инструкция по обработке, <?xml version.. ?>, на самом деле это не так, поэтому не уверен, можно ли на нем сопоставить любые предложения?

ответ

2

Объявление XML выглядит как инструкция обработки, но это не так.

Он существует, чтобы сообщить парсеру XML о документе, который он собирается прочитать (версия XML, кодировка символов).

Он не существует в полученном DOM/infoset и поэтому не может быть сопоставлен в XSLT.

Кроме того, вы не можете динамически изменять директиву <xsl:output>, что-то вроде различных выходных элементов в конструкции <xsl:if> или <xsl:choose> не будет работать.

Мое предложение: Если часть нисходящих приложений не понимают декларации XML (который является WTF факт, что на самом деле заставляет меня чесать голову), а затем оставить их все время с помощью:

<xsl:output omit-xml-declaration="yes" /> 
+0

Я имел в виду, что я могу динамически переключаться с самой таблицы стилей, которая имеет декларацию omit-xml и ту, которая не работает. Спасибо за Ваш ответ. – Thiyagaraj

+0

Вы можете найти строку '' Tomalak