删除 XML 文件中的特殊缩进
本文关键字:缩进 XML 文件 删除 | 更新日期: 2023-09-27 18:33:36
我想修改一个XML文件,但棘手的部分是我添加的信息应该具有最少的格式。 我已经寻找了一段时间,似乎找不到答案。 以下是 XML 当前的外观(原始):
<?xml version="1.0" encoding="utf-8"?>
<doe-jane>
<name>Jane Doe</name>
<contact>North Pole
Tel: (555) 123-4567
jane.doe@abc.com
</contact>
<coveragelist>
<company>Comp1</company>
<company>Comp2</company>
</coveragelist>
</doe-jane>
它必须看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<doe-jane>
<name>Jane Doe</name>
<contact>North Pole
Tel: (555) 123-4567
jane.doe@abc.com
</contact>
--> // Change needs to happen from here on <--
<coveragelist><company>Comp1</company>
<company>Comp2</company>
</coveragelist>
</doe-jane>
这是我到目前为止的代码:
XmlDocument d = new XmlDocument();
//XmlTextWriter wr = new XmlTextWriter(resAnXFile, Encoding.UTF8);
//wr.Formatting = Formatting.None;
d.Load(resAnXFile);
XmlNode t = d.SelectSingleNode("//coveragelist");
t.ParentNode.RemoveChild(t);
// create CoverageList node
XmlNode coverageListNode = d.CreateNode(XmlNodeType.Element, "coveragelist", null);
foreach (var company in dataList)
{
// create company nodes
XmlNode companyNode = d.CreateElement("company");
companyNode.InnerText = company.CompanyName.ToString();
coverageListNode.AppendChild(companyNode);
}
d.DocumentElement.AppendChild(coverageListNode);
d.Save(resAnXFile);
我尝试过XMLTextWriter,但我没有任何运气。 我真的很感激任何帮助。
提前谢谢你。
我对你在问什么有点困惑,但我的理解是这部分:
<公司>Comp1 <公司>Comp2公司>公司>
是新零件,您希望它没有缩进,并且第一家公司与起始"覆盖列表"节点在同一行上?
我知道你说你尝试过XmlTextWriter,但你试过吗:
xmlTextWriter.Formatting = xmlTextWriter.Formatting.None
and
xmlTextWriter.WriteString("'n");
where you need?
If your intend is to remove formatting
StringWriter wr = new StringWriter();
XDocument xDoc = XDocument.Load(.....);
xDoc.Save(wr, SaveOptions.DisableFormatting);
var newXml = wr.ToString();
谢谢大家的建议。 在您的帮助下,我能够提出这个解决方案:
// Open up the same file and remove xml auto-formatting
XmlReader reader = XmlReader.Create(readFileName);
XmlTextWriter writer = new XmlTextWriter(writeFileName, null);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
// if 1st node after openening tag is analyst name then setup a linefeed
if (reader.Name.Equals(Path.GetFileNameWithoutExtension(readerFileName)))
{
writer.WriteStartElement(reader.Name);
writer.WriteString("'r'n");
}
else
{
// setup linefeed after every element
writer.WriteStartElement(reader.Name);
writer.WriteAttributes(reader, true);
if (reader.IsEmptyElement)
{
writer.WriteEndElement();
writer.WriteString("'r'n");
}
}
break;
case XmlNodeType.Text:
writer.WriteString(reader.Value);
break;
case XmlNodeType.EndElement:
writer.WriteEndElement();
break;
// handles opening xml tag
case XmlNodeType.XmlDeclaration:
case XmlNodeType.ProcessingInstruction:
writer.WriteProcessingInstruction(reader.Name, reader.Value);
writer.WriteString("'r'n");
break;
}
}
// close reader & writer
writer.Flush();
reader.Close();