2015-06-24 50 views
0

我有一個這樣的XML定義:XSD定義爲外部實體處理

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<!DOCTYPE doc [ 
    <!ENTITY roomConfig SYSTEM "room/roomConfig.xml"> 
    <!ENTITY roomStats SYSTEM "room/roomStats.xml"> 
    ... 
]> 

<mappingGroups> 
    <configMapping> 
     &roomConfig; 
     &roomStats; 
     ... 
    </configMapping> 
</mappingGroups> 

我不知道該怎麼寫XSD定義<configMapping>節點,具體地講,它引用外部的部分實體處理(XXE)引用:'&roomCofig;'和'&roomStats;'。任何幫助將非常感激。謝謝。

+0

你有什麼已經嘗試過 - 請發佈你的XSD?爲了幫助您解決此問題,您還需要向我們展示文件「room/roomConfig.xml」和「room/roomStats.xml」內的XML結構,因爲這些文件的內容將被插入結果中文件。 – potame

回答

0

外部實體是一個詞彙工具,你可以看到它們是一種宏觀機制。從您的示例中解析的XML是一個元素mappingGroups,其中包含一個元素configMapping,它本身包含2個引用文件中包含的任何內容。

因此,模式與XML文檔使用實體或不使用實體(外部與否)無關。就XML Schema而言,唯一重要的是你的XML文檔在實體替換之後的樣子。可能是這樣的:

<mappingGroups> 
    <configMapping> 
     <config> 
     ... 
     </config> 
     <stats> 
     ... 
     </stats> 
    </configMapping> 
</mappingGroups> 

這就是編寫模式時應該記住的一切。