加载和读取XML文件的处理指令失败

时间:2011-12-14 14:04:10

标签: c# xml-parsing

我陷入了一个微妙的问题。我尝试构建一个C#4.0控制台应用程序来读取带有。

的XML文件

XML文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml:stylesheet type='text/xsl' href='report.xsl' version='1.0'?>
...
<logs>
...
</logs>

这是我的代码:

...
var root = XDocument.Load(xmlStream);

IEnumerable<XElement> address =
    from el in root.Descendants("formated-text")
    select el;
...

这在Load方法中给出了以下错误:

  

':'字符,十六进制值0x3A,不能包含在名称中。第2行,第6位。

将第二行的冒号更改为' - '可以解决错误... duh

我可以在我的代码中做什么来读取源XML而不必先替换'stupid'冒号?

谢谢!

5 个答案:

答案 0 :(得分:3)

在我看来,你只是拥有一个无效的XML文档。冒号为连字符(根据W3C)。我怀疑你是否能够使LINQ to XML解析一个无效的文档 - 你不应该尝试。您应该修改文档。

答案 1 :(得分:3)

冒号错了,你应该使用破折号

请参阅http://www.w3.org/Style/styling-XML.en.html

答案 2 :(得分:2)

无。那个“愚蠢的冒号”在那个位置上无效。

答案 3 :(得分:1)

您的XSL-Stylesheet元素不正确。

应该是:

<?xml-stylesheet type='text/xsl' href='report.xsl' version='1.0'?>

尝试针对任意数量的在线validators验证您的XML。

您可以尝试将XML作为字符串加载并使用字符串解析修复此问题,或者您可以逐行读取原始文件并修复xml:stylsheet的任何出现,然后将其保存为此{{3中的文本文件但是,最好让任何人创建XML以在源头修复它。

答案 4 :(得分:0)

我发现这些“格式错误”的XML文件的起源可以追溯到1990年代中期......是的,今天这样一个旧系统仍然在使用,仍然会产生这种输出。我可以在代码中使用解决方法。

感谢您花时间为这些XML元素提供了一些有用的线索。

我需要确认源XML的创建者在冒号时犯了错误。

我已经实施了一个计划B,直到我能说服一个非常大的部门(不是我的部门)来改变他们的申请......:o(

计划B是首先读取XML文件并替换所有'xml:'出现。然后将此更正的文件提供给我的流程。