【发布时间】:2014-09-08 20:43:07
【问题描述】:
这是一个网络项目。 我从外部来源收到部分 html 字符串。使用 XMLDocument 解析它效果很好,除非它遇到带有嵌入引号的属性,例如下面的“style”属性。
<span id="someId" style="font-family:"Calibri", Sans-Serif;">Some Text</span>
似乎(但我可能错了)LoadXml() 认为 Calibri 之前的双引号结束了样式属性,并且 Calibri 是另一个“令牌”(令牌是我在错误消息中得到的术语) .
var xml = new XmlDocument();
xml.LoadXml(<the html string above, properly escaped>); // <--- here is where I get the error message below
"'Calibri' is an unexpected token. Expecting white space. Line 1, position 18."
我可以使用正则表达式来替换内引号,但它会相当难看。而且,我很可能最终会这样做!
我认为也许 HtmlAgilityPack 会有所帮助,但我找不到关于它的好的文档,我宁愿避免使用文档稀疏的 3rd 方库。
有没有办法让 LoadXml() 接受它(然后,让 Attributes 集合正确解析它)?我对此没有太大希望,但无论如何我都会把它扔在那里。或者我应该完全使用 XmlDocument 以外的另一个类?我愿意使用具有良好文档的 3rd 方库。
【问题讨论】:
-
附带说明,您应该使用 XDocument 而不是 XmlDocument,因为它在 .NET 3.5 中已被弃用
-
您最好让第三方向您发送有效的 XML。他们甚至可能不知道他们正在发送无效的 XML - 这可能只是他们的代码中的一个错误,或者他们可能不理解 XML。如果您可以教育他们,他们将成为您更好的商业伙伴。
-
与论坛网站不同,我们不使用“谢谢”、“任何帮助表示赞赏”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.
-
@Cubicle.Jockey:不,XmlDocument 没有被弃用。值得使用 XDocument 仅仅是因为它是一个更好的 API,但 XmlDocument 本身仍然很好。
-
@shakyjake:我同意 John Saunders 的观点:从根本上说这是无效的 XML,您应该让生产者修复它。生成有效的 XML 并不难,我会为任何未能做到这一点的人感到非常紧张:(