Reputation: 61
I'm stuck on a subtle problem. I try to build a C# 4.0 console application to read an XML file with.
The XML file is as follow:
<?xml version="1.0" encoding="UTF-8"?>
<?xml:stylesheet type='text/xsl' href='report.xsl' version='1.0'?>
...
<logs>
...
</logs>
And this is my code:
...
var root = XDocument.Load(xmlStream);
IEnumerable<XElement> address =
from el in root.Descendants("formated-text")
select el;
...
This gives me the following error at the Load method:
The ':' character, hexadecimal value 0x3A, cannot be included in a name. Line 2, position 6.
Changing the colon on the second line to a '-' solves the error ... duh
What can I do in my code to read the source XML without having to replace that 'stupid' colon first?
Thank you!
Upvotes: 3
Views: 1517
Reputation: 61
I found out that the origin of these 'malformed' XML files dates back to the mid 1990's ... yes, such an old system is today still in use and still produces this output. I can live with a workaround in my code.
Thank you for taking time to provide some usefull clues at what was/is going on with these XML elements.
I needed this confirmation that the creator of the source XML did a mistake with that colon.
I already have implemented a plan B, until I can convince a really big department (not mine) to make the change in their application ... :o(
Plan B is to read the XML file first and replace all 'xml:' occurences. Then feed this corrected file into my process.
Upvotes: 0
Reputation: 91490
You XSL-Stylesheet element is incorrect.
It should be:
<?xml-stylesheet type='text/xsl' href='report.xsl' version='1.0'?>
Try validating your XML against any number of online validators.
You can try loading the XML as a string and fixing this issue using string parsing, or you could read the original file line by line and fix any occurences of xml:stylsheet before saving it like the text file in this example, but it would be better to get whomever created the XML to fix it at source.
Upvotes: 1
Reputation: 6633
The colon is wrong, you should be using the dash
See http://www.w3.org/Style/styling-XML.en.html
Upvotes: 3
Reputation: 1500873
It looks to me like you simply have an invalid XML document. The colon should be a hyphen (as per W3C). I doubt that you'll be able to make LINQ to XML parse an invalid document - and you shouldn't try. You should fix the document instead.
Upvotes: 3
Reputation: 174329
Nothing. That "stupid colon" is simply invalid at that position.
Upvotes: 2