2010-04-08 65 views
5

我寫過一個擴展XmlUrlResolver的類來解析對XML文檔中公共標識符的引用。例如,XML文檔開始時用:如何使用自定義XmlResolver來解析DTD中的公共標識符*?

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE chapter PUBLIC "-//Custom//EN" "custom.dtd"> 

的公共標識符「 - //自定義/ EN」傳遞給我重寫ResolveUri()方法的relativeURI參數,並決定在磁盤上的實際DTD位置。這工作正常。

DTD本身內部存在實體引用時會出現此問題。例如:

<!ENTITY % tablemodel 
    PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN" 
    "soextblx.dtd"> 

在這種情況下,系統標識符 「soextblx.dtd」 傳遞給ResolveUri()代替公共標識符 「 - // OASIS // DTD XML交換臺模型19990315 // EN」。

有什麼辦法可以做到這一點?覆蓋GetEntity()似乎也不起作用,因爲它也傳遞了系統標識符。

+2

你可以在你的課堂上添加代碼嗎? – Cine 2010-04-18 03:41:45

回答

1

在當前的實現中,當解析外部標識符時,不使用公共標識符 。你的選擇是使用異常作爲捕獲,然後字符串驗證公共ID(但是,這種解決方案不是優雅的,並且是cludgy)。雖然,它會工作....

當然(這也需要你知道公共ID或至少一部分字符串),以便您可以使用getEntity()。

我在網上搜索了標識此引用:

http://bytes.com/topic/net/answers/172597-xmlresolver-parameter-entity-problem

希望這有助於。