C#:修改XML文件的标头

时间:2010-08-04 06:29:19

标签: c# xml infopath

我正在使用InfoPath表单的XSD架构在C#中创建XML文件。

当我在不使用代码的情况下保存IP表单时,我得到一个带有以下标题的XML文件:

<?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...

此文件由InfoPath识别并使用正确的XSD,从而以正确的形式显示XML数据。

但是当我使用代码时,我得到了这个:

<?xml version="1.0"?>
<myFields...

InfoPath不承认也不直接打开它;所以我想插入两个标签以保持该功能,以便用户看不到差异。

我的想法是在XML文件创建,保存和关闭后修改它。

如果你能提供帮助,那将是非常好的:D。提前谢谢..

编辑:我终于能够实现我想要的目标了。我使用了 MainMa的 dahlbyk的答案,并提出了一些有效的方法:

  • 我让文件像之前一样保存
  • 我从文件
  • 创建了一个XmlReader对象
  • 我将XmlReader加载到XmlDocument对象
  • 我使用XmlProcessingInstruction
  • 创建了一个XmlDocument.CreateProcessingInstruction对象
  • 我使用PI
  • XmlDoc中插入了xmlDoc.InsertAfter(thePI, XmlDoc.FirstChild)
  • 然后我创建了第二个PI对象
  • 我使用xmlDoc.InsertAfter(thePI, XmlDoc.FirstChild.NextSibling)
  • 插入的内容
  • 然后我将XmlDoc保存在文件中,覆盖它

无论如何,你的回答帮助我理解了很多东西,这让我找到了答案,所以非常感谢你!

2 个答案:

答案 0 :(得分:1)

我会尝试为XmlWriter制作FileStream,使用WriteProcessingInstruction()添加标题,然后将作者传递到Serialize()的相应重载以捕获其余内容输出。

答案 1 :(得分:0)

第一个代码示例的前三行称为 XML处理指令(PI)。因此,如果您使用XmlDocument创建输出XML,则可以使用XmlDocument.CreateProcessingInstruction方法添加所需的PI。

如果要序列化为XML,也可以在序列化对象之前使用XmlTextWriter.WriteProcessingInstruction

如果由于某些原因,你不能这样做,你也可以保存文件,打开它并在第一次换行后插入两个PI,但我非常不鼓励你这样做,因为它将使你的代码在将来难以维护,并减慢速度。