2017-09-15 1 views
0

Quelle est la bonne façon de mettre javascript dans un objet XElement en C#?javascript dans XElement

Actuellement, je donne les résultats suivants:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml.Linq; 

namespace ConsoleApp2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     var tag = new XElement 
       (
        "script", 
        new XAttribute("type", @"text/javascript"), 
        @" 

    $().ready(onLoad); 

    function onLoad() 
    { 
     if (3 > 1){ 
     alert('Hello world'); 
     } 
    }; 
    " 
       ); 

     Console.WriteLine(tag.ToString()); 

     Console.ReadKey(); 
     } 
    } 
} 

Ce qui donne en sortie:

<script type="text/javascript"> 

    $().ready(onLoad); 

    function onLoad() 
    { 
     if (3 &gt; 1){ 
     alert('Hello world'); 
     } 
    }; 
    </script> 

Mais au lieu de &gt; Je veux vraiment > ... Qu'est-ce que je fais mal? Y a-t-il un moyen correct de mettre javascript dans un XElement? Sinon, quelle est la bonne façon?

+2

Avoir un chien errant '>' rendrait XML non valide. XML n'est pas HTML. Il n'y a aucun moyen de mettre un seul '>' dans le texte sans utiliser des constructions XML telles que CDATA ou une référence d'entité, ce qui peut casser la compatibilité avec HTML. –

+0

Voir ceci: https://msdn.microsoft.com/en-us/library/ee388354(v=vs.110).aspx – PaulF

+0

Ou ceci: https://stackoverflow.com/questions/5304311/unescaping-xml- entities-using-xmlreader-in-net – PaulF

Répondre

0

Ce qui suit a fonctionné. J'ai dû ajouter XCData et mettre // devant l'élément XCData et aussi // à la fin du javascript.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml.Linq; 
using System.Web; 

namespace ConsoleApp2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     var tag = new XElement 
       (
        "script", 
        new XAttribute("type", @"text/javascript"), 
        "//", 
        new XCData(@" 

    $().ready(onLoad); 

    function onLoad() 
    { 
     if (3 > 1){ 
     alert('Hello world'); 
     } 
    };//") 
       ); 


     Console.WriteLine(tag.ToString()); 

     Console.ReadKey(); 
     } 
    } 
} 

Ce qui donne le résultat suivant:

<script type="text/javascript">//<![CDATA[                                                    
    $().ready(onLoad);                                                        
     function onLoad()                          
     {                               
      if (3 > 1){                            
       alert('Hello world');                         
      }                              
     };//]]></script>