【问题标题】:Remove comments from an XML file with double dashes --从带有双破折号的 XML 文件中删除注释 --
【发布时间】:2012-11-30 04:10:30
【问题描述】:

如何从 xml 文件中删除包含双破折号 (--) 的无效 xml cmets?

我正在尝试加载 xml 文件,但它失败了。这些 cmets 使 xml 无效。 xml 来自供应商。

我尝试根据其他帖子的方法删除这些,但我没有成功。这是xml的一个例子:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--MAIN VARIABLES-->
<content type="screwed">
<!--KEEP 19-39 -- SEE HELP.TXT AND THE VIDEO TUTORIALS FOR MORE INFO -->
<!--REGULAR/NON-Regular EXAMPLE --><SomeTag somefile="test.txt3" Name="test"/>
<!-- -->
</content>

我尝试了以下方法但没有成功:

string xmlDocFile = "c:\server\test.xml";

XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.IgnoreComments = true;
readerSettings.ProhibitDtd = false;
readerSettings.ValidationType = ValidationType.DTD;
XmlReader reader = XmlReader.Create(xmlDocFile, readerSettings);
XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.Load(reader);
myXmlDoc.Save(xmlDocFile);

【问题讨论】:

  • 正如您指出的那样,这是无效的 XML,因此任何旨在处理 XML 的东西都会遇到困难。如果您可以返回供应商并让他们知道他们的数据不起作用。如果这不是一个选项,您需要将其视为文本文件并使用正则表达式删除 cmets(或所有 cmets)之间的双破折号,然后正常使用 XML。有关如何执行此操作的更多信息,请参阅stackoverflow.com/questions/1304052/…

标签: c# xml


【解决方案1】:

在使用XmlReader之前,使用正则表达式解析xml文件和过滤cmets。

// using System.Text.RegularExpressions;
System.IO.StreamReader file= new System.IO.StreamReader(xmlDocFile);
string validXml = Regex.Replace(file.ReadToEnd(),"<!--.*?-->","");

XmlReader reader = XmlReader.Create(validXml);

【讨论】:

  • 带有正则表达式替换的流式阅读器工作正常,因为这些是小文件,它也非常有效。
  • @user1816955 - 如果这对您有用,您应该选中绿色复选标记以接受此答案。
猜你喜欢
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多