XmlDocument在没有验证的情况下加载Xml

时间:2012-11-29 09:44:17

标签: .net xml

有一些不好的xml,比如:

NaN</td><td id="DemTechLimit8">NaN</td><td id="DemCommercLimit8">NaN</td><td id="AoValue8">NaN</td></tr><tr><td id="DemInt9">8:00 - 9:00
</td><td id="DemValue9">1</td><td id="DemValueDeclined9">NaN</td><td id="CalcValue9">NaN</td><td id="LoadLoss9">NaN</td><td id="DemTechLimit9">NaN</td><td id="DemCommercLimit9">NaN</td><td id="AoValue9">NaN</td></tr><tr><td id="DemInt10">9:00 - 10:00
</td><td id="DemValue10">1</td><td id="DemValueDeclined10">NaN</td><td id="CalcValue10">NaN</td><td id="LoadLoss10">NaN</td><td id="DemTechLimit10

如何在没有任何验证或dtd的情况下将其加载到XmlDocument中?

用于数字签名,因此我无法替换特殊字符或格式化。

以下是JS的示例,但我需要.NET代码:

xmldoce.async = false;
xmldoce.validateOnParse = false;
xmldoce.preserveWhiteSpace = false;
xmldoce.resolveExternals = false;
xmldoce.loadXML(...);

修改

我需要将该内容加载到对象,由schema定义:

<complexType name="ObjectType" mixed="true">
<sequence minOccurs="0" maxOccurs="unbounded">
<any namespace="##any" processContents="lax"/>
</sequence> 
</complexType>

也许可以使用XmlDocument吗?

1 个答案:

答案 0 :(得分:1)

它不是一个xml。它似乎是一个HTML。您可以将其解码为

var html = HttpUtility.HtmlDecode(input);

并且很可能你需要HtmlAgilityPack来解析它。

下面的示例从字符串中提取一些有用的东西

var html = HttpUtility.HtmlDecode(input);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var result = doc.DocumentNode.Descendants("tr")
              .Select(tr=>tr.Descendants("td").Select(td => td.InnerText).ToList())
              .ToList();