XSLT: отключить экранирование вывода во всем документе
Я пытаюсь сгенерировать код C# с помощью xslt-его отлично работает, пока я не доберусь до дженериков и не нужно вывести текст, как это:
MyClass<Type>
в данном случае я обнаружил, что единственный способ издавать это сделать следующее:
MyClass<xsl:text disable-output-escaping="yes"><</xsl:text>Type<xsl:text disable-output-escaping="yes">></xsl:text>
где:
- часто все это должно идти по одной строке, иначе вы в конечном итоге с разрывами строк в сгенерированном коде
- в приведенном выше примере я технически мог использовать только 1
<xsl:text />
, однако, как правило, типаType
задается каким-то другим шаблоном, e.g:
<xsl:value-of select="@type" />
Я не против писать <
много, но я хотел бы избежать написания <xsl:text disable-output-escaping="yes"><</xsl:text>
только для одного персонажа!
есть ли какой-либо способ сделать disable-output-escaping="yes"
для всего документа?
3 ответов
причина, по которой это не работало, заключалась в том, что я применял преобразование - я использовал XslCompiledTransform и XmlWriter для преобразования моего xml, однако в соответствии с блог команд Microsoft XML как только я использую XmlWriter для записи моего вывода, тег игнорируется!
я исправил это, явно установив выходные параметры XmlWriters для параметров преобразования Xsl:
XmlWriterSettings ws = xslt.OutputSettings.Clone();
ws.CheckCharacters = false;
xslt.Transform("MyDocument.xml", XmlWriter.Create(Console.Out, ws));
Как только я это сделал, преобразование, уважаемый мой тег, и все было хорошо!
его отлично работает, пока я не доберусь до generics и нужно вывести некоторый текст вот так:
MyClass<Type>
в этом случае я обнаружил, что единственный способ испустить это-сделать следующий:
MyClass<xsl:text disable-output-escaping="yes"><</xsl:text>Type<xsl:text
disable-output-escaping= "yes">>
конечно, это не единственный способ, и это худший способ получить такой результат.
есть ли способ сделать disable-output-escaping= "yes" для весь документ?
это
Я знаю, что это не прямой ответ на ваш вопрос, но.
огромным допущением здесь: у вас есть что-то вроде:
<classthing class="MyClass" type="atype"/>
вы можете вызвать шаблон:
<xsl:template match="classthing">
<xsl:call-template name="setgeneric">
<xsl:with-param name="myclass"><xsl:value-of select="@class" /></xsl:with-param>
<xsl:with-param name="mytype"><xsl:value-of select="@type" /></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="setgeneric">
<xsl:param name="myclass" />
<xsl:param name="mytype" />
<xsl:value-of select="$myclass"/>
<xsl:text disable-output-escaping="yes"><</xsl:text>
<xsl:value-of select="$mytype"/>
<xsl:text disable-output-escaping="yes">></xsl:text>
</xsl:template>