Je crée un fichier XML en C# en utilisant un schéma XSD d'un formulaire InfoPath.C#: Modification de l'en-tête d'un fichier XML
Quand je sauve la forme IP sans utiliser le code, je reçois un fichier XML avec l'en-tête suivant:
<?xml version="1.0" encoding="UTF-8"?>
<?mso-infoPathSolution solutionVersion="1.0.0.113" productVersion="14.0.0" PIVersion="1.0.0.0" href="file:///\\Hmfp\mcs-shared\PMU\PMU-shared\Tests\QF%207.5%20PMU%20Project%20Outline%20Form%20F1.0.xsn" name="urn:schemas-microsoft-com:office:infopath:QF-7-5-PMU-Project-Outline-Form-F1-0:-myXSD-2010-07-22T07-48-32" ?>
<?mso-application progid="InfoPath.Document"?>
<my:myFields...
Ce fichier est reconnu par InfoPath et utilise la XSD correcte, affichant ainsi les données XML sous la forme correcte.
Mais quand j'utilise le code, je reçois ceci:
<?xml version="1.0"?>
<myFields...
Et ce n'est pas reconnu, ni ouvert directement par InfoPath; donc je voudrais insérer les deux balises afin de garder cette fonctionnalité, de sorte que les utilisateurs ne voient pas la différence.
Ma ligne de pensée est de modifier le fichier XML après qu'il a déjà été créé, enregistré et fermé.
Ce serait très bien si vous pouviez aider: D. Merci d'avance ..
EDIT: J'ai finalement réussi à réaliser ce que je voulais. Je profitai des deux et de dahlbyk de MainMa réponses et est venu avec quelque chose qui fonctionne:
- Je laisse le fichier sont sauvés comme avant
- J'ai créé un objet
XmlReader
à partir du fichier - I chargé le
XmlReader
dans un objetXmlDocument
- I créé un objet en utilisant
XmlProcessingInstruction
XmlDocument.CreateProcessingInstruction
- J'inséré que
PI
dans leXmlDoc
en utilisantxmlDoc.InsertAfter(thePI, XmlDoc.FirstChild)
- J'ai ensuite créé un second
PI
objet - Ce que j'inséré à l'aide
xmlDoc.InsertAfter(thePI, XmlDoc.FirstChild.NextSibling)
- Je sauvé la XmlDoc dans le fichier, l'écraser
Quoi qu'il en soit, tes réponses m'ont aidé à comprendre beaucoup de choses, ce qui m'a fait trouver la réponse, alors merci beaucoup !!
Le code XML est-il généré par une API InfoPath ou utilisez-vous l'une des API .NET XML? – dahlbyk
Je suppose que ce serait une API .NET XML, utilisant un service Web ASP.NET, avec du code C#. J'utilise System.Xml.Serialization.XmlSerializer avec le schéma XSD, puis j'écris dans un objet FileStream. – Yusuf