XmlDocument和正式公共标识符

时间:2009-01-23 13:42:21

标签: .net xml xmldocument

当我将xml文件加载到XmlDocument中时,为什么我的重载XmlResolver中的GetEntity函数被传递Formal Public Identifier?这是一个错误还是我应该处理这个问题?

编辑:以下是一些代码。

比如说我这样做:

XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.XmlResolver = new MyXmlResolver();
myXmlDoc.Load("myxmlfile.xml");

MyXmlResolver我有以下代码:

public override object GetEntity(Uri absUri, string role, Type typeToRet)
{
  if (typeToRet == null || typeToRet == typeof(Stream))
     return GetStream(absUri);
  else
     throw new XmlException("Unsupported class type: " + typeToRet);
}

我在file://path/to/xmldoc/-//W3C//DTD XHTML 1.1//EN中传递了“absUri”,这对我没有任何意义。我只是应该忽略它吗?

3 个答案:

答案 0 :(得分:0)

您真的需要自定义XmlResolver吗?你在解析器中做了什么保证自定义实现?

您传递类似URI的原因是因为您告诉XmlDocument您将明确解析文档中的所有外部引用(如DTD)。如果您不需要手动执行此操作,则应使用现有的XmlResolver类型或保留null并保留默认行为。

答案 1 :(得分:0)

我正在使用一个本地缓存dtd,mod文件等(参见this question)。我做它做的事情的问题在于它传递给我的FPI实际上不是外部参考,我无法将它与真正的外部参考区分开。

答案 2 :(得分:0)

我遇到了同样的问题。我做的是检查传入的值,如果它是一个错误的值,我返回它为我创建的虚拟DTD的有效uri。当正确的dtd在doc旁边时,只需调用LoadXML即可。它知道如何只查看DTD并忽略正在炸毁GetEntity方法的PUBLIC部分。我想在当地的公共场所使用DTD,这样我就不需要在各个地方使用文档。因此,我重写GetEntity,给它提供公共路径,然后我可以将一个DTD用于遍布文件系统的许多文档。