2010-06-14 6 views
1

Je veux créer quelque chose comme ça à l'exécution:la bonne façon de créer un XML comme ceci:

<CWS> 
    <Case name="10-040-00022"> 
     <CaseDetailsSet> 
     <CaseDetail title="Patient name" /> 
     <CaseDetail title="Date of birth" /> 
     </CaseDetailsSet> 
    </Case> 
    </CWS> 

j'ai donc écrit quelque chose comme ça (je souhaite utiliser DOM dans .NET. . pas XMLWriter, etc.)

XmlDocument doc = new XmlDocument(); 

    XmlElement root = doc.CreateElement("CWS"); 
    XmlElement singleCase = doc.CreateElement("Case"); 

    root.AppendChild(singleCase); 

    singleCase.SetAttribute("name", "10-040-00022"); 

    XmlElement CaseDetailsSet = doc.CreateElement("CaseDetailsSet"); 
    singleCase.AppendChild(CaseDetailsSet); 

    XmlElement CaseDetail = doc.CreateElement("CaseDetail"); 
    CaseDetailsSet.AppendChild(CaseDetail); 
    CaseDetail.SetAttribute("title", "Patient Name"); 

s'il vous plaît jeter un oeil à et me dire si je suis Oing quelque chose de mal, regardign le code que je Worte pour créer cette structure ci-dessus.

très apprécié.

+0

est le code ne pas écrire le document que vous attendez? Ou cherchez-vous des conseils sur les meilleures pratiques? – Brabster

+1

Vous voudrez peut-être vérifier Linq-XML. Créer du XML est beaucoup plus facile et vous obtenez la bonté de Linq si nécessaire. – juharr

+0

@juharr - C'est une merveille que j'ai supporté avec ces classes DOM depuis si longtemps. – ChaosPandion

Répondre

2

Deux choses:

  1. Vous devrez ajouter la racine à la XmlDocument.
  2. Vous devez ajouter le second CaseDetail.

    XmlDocument doc = new XmlDocument(); 
    
    XmlElement root = doc.CreateElement("CWS"); 
    
    doc.AppendChild(root); // Append the root element to the XmlDocument 
    
    XmlElement singleCase = doc.CreateElement("Case"); 
    
    root.AppendChild(singleCase); 
    
    singleCase.SetAttribute("name", "10-040-00022"); 
    
    XmlElement CaseDetailsSet = doc.CreateElement("CaseDetailsSet"); 
    singleCase.AppendChild(CaseDetailsSet); 
    
    XmlElement CaseDetail = doc.CreateElement("CaseDetail"); 
    CaseDetailsSet.AppendChild(CaseDetail); 
    CaseDetail.SetAttribute("title", "Patient Name"); 
    
    // add the second case detail 
    XmlElement CaseDetailDateOfBirth = doc.CreateElement("CaseDetail"); 
    CaseDetailsSet.AppendChild(CaseDetailDateOfBirth); 
    CaseDetailDateOfBirth.SetAttribute("title", "Date of birth"); 
    
+1

Pour l'enregistrer sur le disque, doc.Save (@ "c: \ case.xml"); –

+0

merci Monsieur, j'étais tellement inquiet au sujet de la racine que si je l'ai fait mal. – Bohn

+0

En regardant ça, ça me rend un peu malade. – ChaosPandion

1

Je ne vois pas de problème avec votre code. Si cela crée le fichier XML que vous voulez, ça devrait aller. Il existe de nombreuses façons différentes de créer des documents XML, le vôtre semble être correct.

2

Je pensais juste que je montre comment faire avec LINQ to XML

XElement doc = new XElement("CWS", 
    new XElement("Case", 
     new XAttribute("name", "10-040-00022"), 
     new XElement("CaseDetailSet", 
      new XElement("CaseDetail", 
       new XAttribute("title", "Patient name")), 
      new XElement("CaseDetail", 
       new XAttribute("title", "Date of birth"))))); 
+0

merci beaucoup. cela aide ce que j'ai besoin de savoir à cet effet. merci encore et WOW ... ce LINQ est tellement cool de travailler avec. – Bohn

Questions connexes