首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用System.XML.Linq将XML处理指令放在第一行

如何使用System.XML.Linq将XML处理指令放在第一行
EN

Stack Overflow用户
提问于 2015-12-09 18:36:42
回答 2查看 426关注 0票数 0

我正在编写一个控制台应用程序,该应用程序生成一个XML文件,该文件将由很久以前编写的服务器作业处理应用程序使用。服务器应用程序需要一个处理指令:<?JtJob jobname?>。我使用C# XDocument来生成xml:

代码语言:javascript
复制
XDocument xml = new XDocument(new XProcessingInstruction("JtJob", "FieldInspection3_Rejected"),
    new XElement("Document",
        new XElement("DataFile", tempFileName),
        new XElement("FormType","Corrected Form Package"),
        new XElement("BYOD_RejectComment",reasonForRejection),
        new XElement("BYOD_FromTech",techEmail)
    )
);
xml.Save(Path.Combine("C:\\Data", DateTime.Now.ToString("yyyyMMdd_HHmmssffff") + "_Rejected.xml"));

出于某种原因,服务器应用程序要求处理指令位于第一行。如果我的xml文件如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?><?JtJob FieldInspection3_Rejected?>
<Document>
  <DataFile>C:\Windows\TEMP\tmp387F.tmp</DataFile>
  <FormType>Corrected Form Package</FormType>
  <BYOD_RejectComment>you're ugly</BYOD_RejectComment>
  <BYOD_FromTech>example@gmail.com</BYOD_FromTech>
</Document>

一切都很好。但当它看起来像这样:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<?JtJob FieldInspection3_Rejected?>
<Document>
  <DataFile>C:\Windows\TEMP\tmp387F.tmp</DataFile>
  <FormType>Corrected Form Package</FormType>
  <BYOD_RejectComment>you're ugly</BYOD_RejectComment>
  <BYOD_FromTech>example@gmail.com</BYOD_FromTech>
</Document>

它是错误的。我的问题是,使用上面的XDocument代码,它会生成第二个输出。

如果不将生成的xml加载回字符串并操作字符串,是否有一种方法可以告诉XDocument在第一行上创建处理指令?

我知道,肯定是因为服务器应用程序不接受有效的XML语法而受到指责,但我的目标是让它正常工作,而不是修复一个有20年历史的程序。

编辑:谢谢!使用保存覆盖保留格式。没有做到所有的一行,但它允许我保持PI在第1行。

编辑2:嗯,这也帮不了我。但我发现了什么能帮到我!默认情况下,XDocument.Save()用BOM输出UTF8。我通过使用XMLTextWriter将其更改为无BOM,这是有效的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-09 18:47:05

如果您使用XDocument.Save(String,SaveOptions)方法在一行上获得全部输出会怎么样?

因此,可以这样做:

代码语言:javascript
复制
xml.Save(fileName, SaveOptions.DisableFormatting);

这将迫使声明放在第一行上,这样做的缺点是将整个文档放在第一行,但是如果它适用于该程序,那么也可以这样做。

票数 1
EN

Stack Overflow用户

发布于 2015-12-09 18:53:16

您需要使用允许指定格式选项的XDocument.Save()重载:

代码语言:javascript
复制
xml.Save(Path.Combine("C:\\Data", DateTime.Now.ToString("yyyyMMdd_HHmmssffff") + "_Rejected.xml"),
         SaveOptions.DisableFormatting);

https://msdn.microsoft.com/en-us/library/bb551426(v=vs.110).aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34186487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档