我陷入了一个微妙的问题。我尝试构建一个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'冒号?
谢谢!
答案 0 :(得分:3)
在我看来,你只是拥有一个无效的XML文档。冒号应为连字符(根据W3C)。我怀疑你是否能够使LINQ to XML解析一个无效的文档 - 你不应该尝试。您应该修改文档。
答案 1 :(得分:3)
冒号错了,你应该使用破折号
答案 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:'出现。然后将此更正的文件提供给我的流程。