XSLT-экранирование

У меня, как и у многих, проблема с уходом от знака>. XML-файл данных выглядит как

<XML>
<check><![CDATA[value > 60]]></check>
</Xml>

с xslt я хотел бы создать функцию С #. проверки - это элементы, которые использовались в операторе if.

public void product(int value)
{
if( <xsl:value-of disable-output-escaping="yes" select="actie" />)

this should be: if( value > 60 ) but returns if( value &gt; 60 ) 

}

<xsl:value-of cdata-section-elements="check"/> нельзя использовать, потому что я не могу использовать эти данные в шаблоне.

disable-output-escaping просто возвращает &gt;

надеюсь, что у одного из вас есть рабочее решение.

заранее спасибо


person thanksalot    schedule 17.01.2011    source источник
comment
Хороший вопрос, +1. См. Мой ответ для полного и очень простого решения. :)   -  person Dimitre Novatchev    schedule 17.01.2011
comment
Вы написали: У меня, как и у многих людей, проблема с уходом от знака ›. Это не вопрос, а заявление. Любой потребитель XML знает, как работать с символьными объектами. У некоторых людей возникают проблемы, когда они пытаются использовать XML-документы, а потребители XML не жалуются.   -  person    schedule 17.01.2011
comment
Кроме того, неясно, какой метод сериализации вам нужно использовать. Как указано в ответе @Dimitre, с помощью метода сериализации text не выполняется побег.   -  person    schedule 17.01.2011


Ответы (2)


Вам вообще не нужен ДОЭ. Просто укажите:

<xsl:output method="text"/>

и результат не будет экранирован.

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

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

    <xsl:template match="/*">
   public void product(int value)
       {
        if( <xsl:value-of select="check" />)
        }
  </xsl:template>
</xsl:stylesheet>

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

   public void product(int value)
        {
         if( value > 60)
        }

Помните:

  1. Когда методом вывода является "текст", любые символы, которые экранируются в XML-документе, такие как &, < (>, &quot; и &apos; обычно не нужно экранировать вообще), создаются без экранирования. на выходе.

  2. Всегда старайтесь избегать использования DOE - это почти никогда не требуется.

person Dimitre Novatchev    schedule 17.01.2011

Спасибо за помощь, но это не было решением, мне помог друг, который сказал мне, что я делал это неправильно при вызове файла xslt. Что я сделал:

XPathDocument myXPathDoc = new XPathDocument("../../file.xml");
XslTransform myXslTrans = new XslTransform();
myXslTrans.Load("../../file.xslt");
XmlTextWriter myWriter = new XmlTextWriter("../../file.txt", null);
myXslTrans.Transform(myXPathDoc, null, myWriter);

я изменил его на:

XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load("../../file.xslt");
myXslTrans.Transform("../../file.xml", "../../file.cs");

теперь это сработало

person thanksalot    schedule 18.01.2011
comment
Использование класса XslCompiledTransform вместо старого класса XslTransform не имеет ничего общего с вашим не так четко определенным вопросом - person ; 18.01.2011