XSLT: Отключите выходной выход во всем документе

Я пытаюсь сгенерировать некоторый код C# с помощью xslt - его работа, большая, пока я не добираюсь до дженериков и потребности произвести некоторый текст как это:

MyClass<Type>

В этом случае я нашел, что единственный способ испустить это состоит в том, чтобы сделать следующее:

MyClass<xsl:text disable-output-escaping="yes">&lt;</xsl:text>Type<xsl:text disable-output-escaping="yes">&gt;</xsl:text>

Где:

  • Часто все это должно пойти на одну строку, иначе Вы заканчиваете с разрывами строки в сгенерированном коде
  • В вышеупомянутом примере я технически, возможно, использовал только 1 <xsl:text />, однако обычно тип Type дан некоторым другим шаблоном, например:

<xsl:value-of select="@type" />

Я не возражаю иметь необходимость записать &lt; много, но я хотел бы постараться не писать <xsl:text disable-output-escaping="yes">&lt;</xsl:text> для просто отдельного символа!

Есть ли любой способ сделать disable-output-escaping="yes" для всего документа?

6
задан Justin 7 May 2010 в 15:59
поделиться

3 ответа

Причина, по которой это не сработало, заключалась в том, что я применял преобразование - я использовал XslCompiledTransform и XmlWriter для преобразования моего xml, однако, согласно блогу Microsoft XML Teams , как только я использую XmlWriter для записи вывода, тег игнорируется!

Я исправил это, явно установив параметры вывода XmlWriters на параметры преобразования Xsl:

XmlWriterSettings ws = xslt.OutputSettings.Clone();
ws.CheckCharacters = false;

xslt.Transform("MyDocument.xml", XmlWriter.Create(Console.Out, ws));

Как только я это сделал, преобразование уважало мой тег, и все было хорошо!

2
ответ дан 17 December 2019 в 18:11
поделиться

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

 MyClass  
 

В этом случае я обнаружил, что единственный способ выдать это - выполнить { {1}} следующее:

 MyClass  << / xsl: text> Тип 

disable-output-escaping = "да" >>

Конечно, это не единственный способ получить такой результат .

Есть ли способ сделать disable-output-escaping = "yes" для всего документа?

Это то, что method = "text" атрибут предназначен для. Нет необходимости в DOE .

Итак, используйте метод вывода tex t, а затем:

 MyClass&lt;Type>

Вот полный небольшой пример .

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
  MyClass&lt;Type>
 </xsl:template>
</xsl:stylesheet>

Когда вышеуказанное преобразование применяется к любому XML-документу (не используется), получается желаемый результат :

  MyClass<Type>

Я являюсь автором XPath Visualizer, который создает представление файлов XML в стиле IE - нигде в воровском коде нет DOE.

1
ответ дан 17 December 2019 в 18:11
поделиться

Я знаю, что это НЕ прямой ответ на ваш вопрос, но.

Громадное предположение: у вас есть что-то вроде:

<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">&lt;</xsl:text>
    <xsl:value-of select="$mytype"/>
    <xsl:text disable-output-escaping="yes">&gt;</xsl:text>
  </xsl:template>
0
ответ дан 17 December 2019 в 18:11
поделиться
Другие вопросы по тегам:

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