0
我有一個xml文件引用了一個本地dtd文件。但問題是我的文件被壓縮成單個文件(我使用的是Unity3D,它將我所有的文本文件放入一個二進制文件中)。這個問題不是Unity3D特有的,它對於任何試圖從字符串加載DTD模式的人都很有用。從字符串驗證xml針對dtd
我想到了一種解決方法來加載xml並單獨加載dtd,然後將dtd文件添加到我的文檔的XmlSchemas中。像這樣:
private void ReadConfig(string filePath)
{
// load the xml file
TextAsset text = (TextAsset)Resources.Load(filePath);
StringReader sr = new StringReader(text.text);
sr.Read(); // skip BOM, Unity3D catch!
// load the dtd file
TextAsset dtdAsset = (TextAsset)Resources.Load("Configs/condigDtd");
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add(...); // my dtd should be added into this schemaset somehow, but it's only a string and not a filepath.
XmlReaderSettings settings = new XmlReaderSettings() { ValidationType = ValidationType.DTD, ProhibitDtd = false, Schemas = schemaSet};
XmlReader r = XmlReader.Create(sr, settings);
XmlDocument doc = new XmlDocument();
doc.Load(r);
}
xml以這種方式啓動,但無法找到dtd。不奇怪,因爲xml文件是作爲字符串加載的,而不是來自文件。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Scene SYSTEM "configDtd.dtd">
謝謝,它幾乎似乎工作。但是Mono正在拋出一個關於無法找到的聲明的幻想。我認爲這將工作,如果我不會在單聲道工作。所以贊成這個。我會嘗試使用xsd文件。 – Marnix