<?xml version="1.0" encoding="utf-8"?>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TestText>&IncludeDirs;</TestText>
</Test>关键是&IncludeDirs;
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TestText>&IncludeDirs;</TestText>
</Test>关键是&IncludeDirs;
http://support.microsoft.com/kb/316063
<会被转义为<那&IncludeDir;会被转移成什么?或者如何禁用这个转义?那个XML之前是用perl和C++读的,都没问题,但是用C#读就有问题了
<!DOCTYPE Test [
<!ELEMENT TestText (#PCDATA)>
<!ENTITY IncludeDirs "abcde">
]>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TestText>&IncludeDirs;</TestText>
</Test>C#解析
var stream = Assembly.GetEntryAssembly().GetManifestResourceStream("Test.file.xml");
var xr = XmlReader.Create(stream, new XmlReaderSettings() { ProhibitDtd=false });
xr.ReadToFollowing("TestText");
Console.WriteLine(xr.ReadElementString());程序输出
abcde
&IncludeDirs;被转意成abcde
<TestText><![CDATA[&IncludeDirs;]]></TestText>如果要治个标,可以参考这篇文章:
http://stackoverflow.com/questions/121511/reading-xml-with-an-into-c-xmldocument-object先用Regex将 & 替换成 &
跟语言或者平台没有关系,这是xml规范(例如参考http://www.w3.org/TR/1998/REC-xml-19980210)所规定的,不遵守这个规范的所谓“没问题”才是出了邪门了呢。