使用XMLDocument对象分析值中嵌入双引号的xml属性

本文关键字:属性 xml 对象 XMLDocument 使用 | 更新日期: 2023-09-27 18:21:10

这是一个web项目。我收到一个来自外部源的部分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."

我可以使用Regex来替换内部引号,但它会相当难看。而且,我很可能最终会这么做!

我想HtmlAgilityPack可能会有所帮助,但我找不到好的文档,我宁愿避免使用文档稀疏的第三方库。

有没有办法让LoadXml()接受它(然后让Attributes集合正确解析它)?我对此没有太大希望,但无论如何我都会把它扔出去。或者我应该使用XmlDocument之外的其他类吗?我愿意使用具有良好文档的第三方图书馆。

使用XMLDocument对象分析值中嵌入双引号的xml属性

该数据无效。用双引号引起来的属性值中不能包含双引号。用单引号引起来的属性的值中不能有单引号。

有效:

<tag attr1="value with 'single' quotes" attr2='value with "double" quotes' />

无效:

<tag attr1="value with "double" quotes" attr2='value with 'single' quotes' />

请注意,无效示例可以通过以下方式生效:

<tag attr1="value with &quot;double&quot; quotes" attr2='value with &apos;single&apos; quotes' />