Jam*_*lak 5 c# xml validation dtd
我编写了一个扩展XmlUrlResolver的类来解析XML文档中对公共标识符的引用.例如,当XML文档以以下内容开头时:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE chapter PUBLIC "-//Custom//EN" "custom.dtd">
Run Code Online (Sandbox Code Playgroud)
公共标识符" - // Custom/EN"将传递给relativeURI我的override ResolveUri()方法的参数,并解析为磁盘上的实际DTD位置.这工作正常.
当DTD本身内存在实体引用时,会出现此问题.例如:
<!ENTITY % tablemodel
PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN"
"soextblx.dtd">
Run Code Online (Sandbox Code Playgroud)
在这种情况下,系统标识符"soextblx.dtd"被传递给ResolveUri()公共标识符" - // OASIS // DTD XML Exchange Table Model 19990315 // EN".
有没有办法实现这个目标?覆盖GetEntity()似乎也不起作用,因为它也传递了系统标识符.
小智 1
在当前实现中,解析外部标识符时不使用公共标识符。您的选择是使用异常作为捕获,然后通过字符串验证公共 id(但是,此解决方案并不优雅且笨拙)。虽然,它会起作用......
当然(这还要求您知道公共 ID 或至少字符串的一部分),以便您可以使用 getEntity()。
我在网上搜索了一个参考资料来确定这一点:
http://bytes.com/topic/net/answers/172597-xmlresolver-parameter-entity-problem
希望这会有所帮助。
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |