2011-09-20 4 views
0

J'ai construit une balise xml en utilisant Stringbuilder. Cette chaîne Stringbuilder que je veux convertir en tant que chaîne au format XML en utilisant C#. Ci-dessous j'ai spécifié la chaîne d'entrée et la chaîne de sortie attendue.Convertir une chaîne en xml en C#

EX:

Input: 
     <Configuration Id="5020244c-42c4-4a3c-af16-806d8948c7fd" Name="ACTDrawing" Landscape="True" PaperKind="A3" IsNewConfiguration="true"><Worksheets><WorkSheet Name="OVERVIEW" Zoom="100" Lock="False" Default="True"> <Page Id="7eba0912-51bf-4ffe-ac65-6ac495fa5af6" Number="1" Lock="False"></WorkSheet></Worksheets></Configuration> 

Expected Output: 
     <Configuration Id=\"5020244c-42c4-4a3c-af16-806d8948c7fd\" Name=\"ACTDrawing\" Landscape=\"True\" PaperKind=\"A3\" IsNewConfiguration=\"true\"><Worksheets><WorkSheet Name=\"OVERVIEW\" Zoom=\"100\" Lock=\"False\" Default=\"True\"><Page Id=\"7eba0912-51bf-4ffe-ac65-6ac495fa5af6\" Number=\"1\" Lock=\"False\"></WorkSheet></Worksheets></Configuration> 

J'ai fait le code pour cette conversion.

Ex:

StringBuilder ACTConfigXML = new StringBuilder(); 
ACTConfigXML.Append("<Configuration Id=\""); 
ACTConfigXML.Append(System.Guid.NewGuid()); 
ACTConfigXML.Append("\" Name=\"ACTDrawing\" " + 
    "Landscape=\"True\" PaperKind=\"A3\" " + 
    "IsNewConfiguration=\"true\">"); 
ACTConfigXML.Append("<Worksheets>"); 
ACTConfigXML.Append("<WorkSheet Name=\""); 
ACTConfigXML.Append(_WorkSheetName.ToString()); 
ACTConfigXML.Append("\" Zoom=\"100\" Lock=\"False\" Default=\"False\">"); 
ACTConfigXML.Append("</WorkSheet>"); 
ACTConfigXML.Append("</Worksheets></Configuration>"); 

XmlDocument _ACTGraphicalXMLDoc = new XmlDocument(); 
_ACTGraphicalXMLDoc.LoadXml(ACTConfigXML.ToString()); 
ACTConfigXML = new StringBuilder(); 
ACTConfigXML.Append(_ACTGraphicalXMLDoc.OuterXml); 
string configXML = ACTConfigXML.ToString(); 

Dans cet exemple, je ne veux pas utiliser "_ACTGraphicalXMLDoc.OuterXml" pour le formatage. Je veux convertir les données "ACTConfigXML" au format attendu.

Répondre

0

Si c'est votre entrée, alors enregistrez-la en tant que fichier XML. Vous n'avez pas besoin des guillemets doubles en XML (vous en avez seulement besoin si vous mettez un littéral dans votre programme). Votre question n'explique pas ce que vous avez essayé, etc. Elle n'aborde pas non plus l'objectif final.

0

D'après ce que vous avez posté, il ressemble à String.replace() pourrait faire l'affaire

output = input.replace("{", "\""); 
output = output.replace("\"", "\\\""); 
0

Vous pouvez enregistrer votre chaîne avec XmlDocument

0

Il est rarement une bonne idée de construire un document de chaînes. Vous vous configurez pour les erreurs XML si le "_WorkSheetName.ToString()" contient quelque chose qui va casser XML (comme un "/> ...) Créer un document XML de modèle dans une chaîne ou un fichier disque, charger dans DOM avec XmlDomDocument.loadXML, mettez à jour les valeurs/attributs dont vous avez besoin.Par exemple

string strXML = @" 
<Configuration id='to be replaced' Landscape='True' PaperKind='A3' IsNewConfiguration='true'> 
    <Worksheets> 
     <Worksheet Name='to be replaced' Zoom='100' Lock='False' Default='False'/> 
    </Worksheets> 
</Configuration>"; 

XmlDocument xml = new XmlDocument(); 
xml.LoadXml(strXML); 
XmlElement ndElement = xml.DocumentElement; 
ndElement.SetAttribute("id", System.Guid.NewGuid().ToString()); 

XmlElement ndWorksheet = (XmlElement)xml.SelectSingleNode("/Configuration/Worksheets/Worksheet"); 
if(ndWorksheet != null) { 
    ndWorksheet.SetAttribute("Name", "Safe worksheet name <>'\"/>"); 
} 

xml.Save(Response.OutputStream);