我是 XML 的新手,我现在正在尝试读取 xml 文件。 我用谷歌搜索并尝试以这种方式读取 xml,但出现此错误。
Reference to undeclared entity 'Ccaron'. Line 2902, position 9.
当我转到第 2902 行时,我得到了这个,
<H0742>Čopova 14, POB 1725,
SI-1000 Ljubljana</H0742>
这是我尝试过的方式
XmlDocument xDoc = new XmlDocument();
xDoc.Load(file);
XmlNodeList nodes = xDoc.SelectNodes("nodeName");
foreach (XmlNode n in nodes)
{
if (n.SelectSingleNode("H0742") != null)
{
row.IrNbr = n.SelectSingleNode("H0742").InnerText;
}
.
.
.
}
当我查看 w3school 时,& 在 xml 中是非法的。
编辑: 这是编码。我想知道它与 xml 有什么关系。
encoding='iso-8859-1'
提前致谢。
编辑:
他们给了我一个 .ENT 文件,我可以引用在线 ftp.MyPartnerCompany.com/name.ent。 在这个 .ENT 文件中 我看到这样的实体
<!ENTITY Cacute "Ć"> <!-- latin capital letter C with acute,
U+0106 Latin Extended-A -->
如何在我的 xml 解析中引用它? 我更喜欢在线引用,因为他们可能随时添加新的。 提前致谢!!!
最佳答案
首先要注意的是问题不在您的软件中。
由于您是 XML 的新手,我猜您以前不会遇到定义实体的问题。字符实体是任意文本片段(一个或多个字符)的快捷方式。您最常看到它们的地方就是您现在所处的情况。在某些时候,您的 XML 是由想要键入字符“C”或“C”的人创建的(如果您的字体无法显示,则为带 Caron 的大写和小写 C)。
但是,在 XML 中,我们只有几个预先声明的实体(与号、小于号、大于号、双引号和撇号)。需要声明任何其他字符实体。为了正确解析您的文件,您需要做以下两件事之一 - 用不会导致解析器问题的东西替换字符实体或声明实体。
要声明实体,您可以使用称为“内部子集”的东西 - 您可能会在 XML 文件顶部看到的 DTD 语句的一种特殊形式。像这样:
<!DOCTYPE root-element
[ <!ENTITY Ccaron "Č">
<!ENTITY ccaron "č">]
>
将该语句放在 XML 文件的开头(更改“根元素”以匹配您的)将允许解析器解析实体。
或者,只需将 Č
更改为 Č
,您的问题也将得到解决。
表示法是一个数字实体,为字符提供适当的 unicode 值('x' 表示它是十六进制)。
您也可以只输入字符,但这需要了解您的键盘和区域的来龙去脉。
关于c# - xml 和 & 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7993024/