2012-07-07 2 views
-1

essayer la division des données de chaîne et de construire au format XML à l'aide LINQ to XML, mais je suis face à certains difficulities pour générer une chaîne xmldiviser les données de chaîne et de construire une chaîne XML en utilisant LINQ au format xml en C#

mystring = {1:abcd}{2:efgh}{3:/r/n:12:mmm/r/n:65:nnn} 

sortie requise:

<MESSAGE> 
<BLOCK1> 
<VALUE>abcd</VALUE> 
</BLOCK1> 
<BLOCK2> 
<VALUE>efgh</VALUE> 
</BLOCK2> 
<BLOCK3> 
<TAG>12</TAG> 
<VALUE>mmm</VALUE> 
<TAG>65</TAG> 
<VALUE>nnn</VALUE> 
</BLOCK3> 
</MESSAGE> 

conseils Veuillez au-dessus même

+2

'Je fais face à des difficultés 'Quelles difficultés? –

+0

pour construire la requête linq en xml, j'essaie ce document XDocument = new XDocument ( nouveau XElement ("MESSAGE", stringToPrint.Split() .Select ((item, pos) => nouveau XElement ("filed" + (pos + 1), item)) – user1494292

Répondre

0
mystring = {1:abcd}{2:efgh}{3:/r/n:12:mmm/r/n:65:nnn} 
  • Utilisez d'abord Regex pour obtenir les modèles correspondants de parenthèses.

1:abcd2:efgh3:/r/n:12:mmm/r/n:65:nnn

  • Puis, avec les chaînes résultantes qui contiennent vos cordes construire votre xml. Vous voudrez peut-être remplacer tous les /r/n avec un espace vide comme dans "3:/r/n:12:mmm/r/n:65:nnn".Replace("/r/n", ""). Ensuite, appelez .Split(':') pour le transformer en tableau. De là, vous devrez développer votre logique pour analyser le tableau de cordes dans vos noeuds. Il apparaît que si la valeur peut être int.TryParse(string, out int value) alors il va dans un élément TAG sinon un élément VALUE.

  • Et bien sûr ignorer tous les éléments de tableau vides. Vous pouvez le faire dans votre Split avec Split(':', StringSplitOptions.RemoveEmptyEntries) si vous ne les voyez pas dans votre tableau.

Questions connexes