如何在C#中使用DTD解析XML解析文件

问题描述:

如何在C#中使用我的XML在线或外部DTD参考?如何在C#中使用DTD解析XML解析文件

string fileName = @"C:\\temp\H2009.xml"; 

    XmlDocument xDoc = new XmlDocument(); 

    xDoc.Load(fileName); 

我DTD文件ftp.myPartnerCompany.com/Name.ent

在这种.ENT文件,他们定义的实体一样,

<!ENTITY Acaron "&#258;"> <!-- latin capital letter A with caron (breve),         
            U+0102 Latin Extended-A --> 


<!ENTITY acaron "&#259;"> <!-- latin small letter a with caron (breve),         
            U+0103 Latin Extended-A --> 
<!ENTITY Acedil "&#260;"> <!-- latin capital letter A with cedilla, 
            U+0104 Latin Extended-A --> 

现在我因为我不知道如何链接xml和.ent文件,所以得到了类似下面的问题。

引用了未声明实体 'Acaron'。线4971,21位

在此先感谢。

编辑

忘记提到我的XML文件,它会像,下面。

<?xml version='1.0' encoding='iso-8859-1'?> 
<MA> 
<Y07 CLID='C737467' KW='BIRANT' KW2='ESINOGLU'> 
     <Y0747>B&acaron;RANT ES&acaron;NO&Gcaron;LU</Y0747> 
     <Y0748>MARK KO KYI Sok Kuulu&scedil; Sit 
      KA&Gcaron;ITHASDNE/&Idot;THAILAND 
     </Y0748> 
<Y07> 
<MA> 
+0

检查以下内容:http://*.com/questions/470313/net-how-to-validate-xml-file-with-dtd-without-doctype-declaration – Polity

根据您问题中的示例,您指向的.ent文件不是DTD。没有任何ELEMENT/ATTLIST声明,所以结构没有定义。没有DTD,你的XML只能很好地形成(但事实并非如此)。

引用包含所有实体声明的文件,你需要一个DOCTYPE声明来使用参数实体。我不知道C#,所以我不知道你到底怎么会这样编写这个输出是正确的,但这里是你的XML输出应该是什么样子的例子:

<!DOCTYPE MA [ 
<!ENTITY % ents SYSTEM "name.ent"> 
%ents; 
]> 
<MA> 
    <Y07 CLID="C737467" KW="BIRANT" KW2="ESINOGLU"> 
    <Y0747>B&acaron;RANT ES&acaron;NO&Gcaron;LU</Y0747> 
    <Y0748>MARK KO KYI Sok Kuulu&scedil; Sit KA&Gcaron;ITHASDNE/&Idot;THAILAND </Y0748> 
    </Y07> 
</MA> 

希望这有助于。