2010-03-04 4 views
0

J'essaie de créer un fichier XML pour se conformer à quelqu'un XSD ce XSD permet le contenu XHTML dans sa balise de description. J'ai coupé court la hiérarchie de la méthode mais, fondamentalement, il effectue les opérations suivantes:Arrêter XDocument encoder les chaînes d'URL

using System.Xml.Linq; 

public static XDocument Create() 
    {    
     XDocument doc = new XDocument(
      new XDeclaration("1.0", Encoding.UTF8.HeaderName, String.Empty), 
      GetCourses() 
      ); 

     //ValidatingProcess(@".\xcri_cap_1_1.xsd", doc.ToString()); 

     return doc; 
    } 

private static XElement GetCourses(XElement provider) 
    { 
     //datatbale dt generated here from sql 
     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      provider.Add(new XElement("course", 
        new XElement("identifier", dt.Rows[i]["QN_ID"]), 
        new XElement("title", dt.Rows[i]["LSC Descriptor"]), 
        new XElement("subject", dt.Rows[i]["category"]), 
        new XElement("description", dt.Rows[i]["Course_Overview"], 
        new XAttribute("Type", "Course Overview")), 
        //new XElement("description", dt.Rows[i]["Entry_Requirements"]), 
        //new XAttribute("Type", "Entry Requirements"), 
        new XElement("description", dt.Rows[i]["Course_Contents"], 
        new XAttribute("Type", "Course Contents")), 
        new XElement("description", dt.Rows[i]["Assessment"], 
        new XAttribute("Type", "Assessment")), 
        new XElement("description", dt.Rows[i]["Progression_Route"], 
        new XAttribute("Type", "Progression Route")), 
        new XElement("url", "http://www.nnc.ac.uk/CourseLeaflets/Leaflet2.aspx?qnid=" + dt.Rows[i]["QN_ID"]), 
        GetQualification(dt.Rows[i])//, 
        //GetPresentation(row) 
        )); 
     } 

     return provider; 
    } 

Les champs comme « Course_Overview », « Entry_Requirements » contiennent XHTML sans codage d'URL, mais lorsqu'il est ajouté au XDocument il semble les encoder automatiquement si je finir avec &lt;P&gt; au lieu de <P>. Y at-il de toute façon d'arrêter ceci ou vais-je devoir utiliser quelque chose au lieu de XDocument?

La raison pour laquelle j'ai démarré avec XDocument est que la disposition du code peut sembler similaire au résultat final.

Répondre

3

L'ajout de contenu textuel est traité comme si vous vouliez du contenu textuel, et non comme un "XML interne".

Je pense que vous feriez mieux de convertir la chaîne de XML en un fragment de document, puis d'ajouter ce fragment (essentiellement le sring doit être converti en noeuds, puis ajouter les noeuds). Pour créer le fragment de document, utilisez XElement.Parse.

+0

Merci, je pensais que c'était le raisonnement, mais je ne savais pas le contourner. Bien que je viens de découvrir quelques balises li manquent leur balise de fin, je vais devoir passer par quelque chose pour confirmer qu'il est XHTML. – PeteT

1

Ce comportement est correct.

Ce que vous voulez est réellement d'analyser la description HTML et l'insérer. Jetez un oeil à XElement.Parse().

Je crois que le MSDN Social question adresse votre cas plutôt bien.

Questions connexes