【发布时间】:2011-02-05 17:07:22
【问题描述】:
我编写了一个扩展 XmlUrlResolver 的类来解析对 XML 文档中公共标识符的引用。例如,当 XML 文档以:
开头时<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE chapter PUBLIC "-//Custom//EN" "custom.dtd">
公共标识符“-//Custom/EN”被传递给我覆盖的ResolveUri() 方法的relativeURI 参数,并解析为磁盘上的实际DTD 位置。这工作正常。
当 DTD 本身内部存在实体引用时,就会出现此问题。例如:
<!ENTITY % tablemodel
PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN"
"soextblx.dtd">
在这种情况下,系统标识符“soextblx.dtd”被传递给ResolveUri(),而不是公共标识符“-//OASIS//DTD XML Exchange Table Model 19990315//EN”。
有没有办法做到这一点?覆盖 GetEntity() 似乎也不起作用,因为它还传递了系统标识符。
【问题讨论】:
-
你能在你的课堂上添加代码吗?
标签: c# xml validation dtd