【发布时间】:2013-10-10 20:33:32
【问题描述】:
到目前为止,我正在做的是:
try
{
XmlDocument xmldoc = loadXml(orderFilePath);
}
catch (XmlException exception)
{
//... blah blah - there was an error, let the user know
}
但我真的很希望能够尝试解析文件。当我说“格式错误”时,我并不一定意味着会有一个未封闭的标签或元素,而是元素的值中可能包含以下内容之一:''、'&'
我已经看到有人提到我可能必须使用 XmlReader - 但是这仍然会在该元素上引发异常,还是允许我以某种方式解决问题?
我知道从源头修复 XML 是最好的解决方案,但我无法控制 XML 的来源。
谢谢!
编辑:
XML 的超级简单示例:
<Order>
<Customer_ID>555-555-5555</Customer_ID>
<ShipToAddress>
<Customer_Name>Some Guy</Customer_Name>
<Street>123 Fake Dr.</Street>
<Street2></Street2>
<City>West Palm Beach</City>
<State>FL</State>
<ZipCode>33417</ZipCode>
<Country>United States</Country>
</ShipToAddress>
<BillToAddress>
<Customer_Name>Some Guy</Customer_Name>
<Street>123 Fake Dr.</Street>
<Street2></Street2>
<City>West Palm Beach</City>
<State>FL</State>
<ZipCode>33417</ZipCode>
<Country>United States</Country>
</BillToAddress>
<items>
<item>
<Product_ID>25101</Product_ID>
<Product_Name></Product_Name>
<Quantity>1</Quantity>
<USPrice>26.95000</USPrice>
</item>
</items>
<!-- bad stuff here -->
<How_did_you_hear_about_us>Coffee & Tea magazine</How_did_you_hear_about_us>
<!-- bad stuff here -->
</Order>
问题是 - 我不一定知道它是否会一直在同一个地方。
【问题讨论】:
-
给出格式错误的 XML 的更清晰示例。
-
您可能需要先读取文件并使用正则表达式将未转义字符匹配并替换为转义版本,然后将文档重新读取为 XML。您必须确定哪些可能是畸形的以及如何修复它才能制作您的表达。也许你可以假设 XML 标记总是格式正确的,因此用它们的转义版本替换任何杂散括号,这些版本被假定为被读取为文本
-
格式错误的 XML 不是 XML。您应该将其视为文本文件并适当阅读...也许某些 HTML 解析器会起作用(即我会尝试 HtmlAgilityPack)。
-
我现在明白了。您绝对可以使用一些正则表达式来查看
>和<之间的内容,并将&替换为其他内容。 -
@Zaemz 我知道这不是 C#,但请查看 this question。它看起来几乎与您遇到的问题完全相同。其中一个答案也有您需要的正则表达式!
标签: c# xml exception malformed