2012-01-12 61 views
0

我有一個xml文件,它定義了來自客戶端的預期數據關鍵字(也是在xml中)。例如。關於如何根據定義的XML格式定義XML的算法

<aa alias="a"> 
    <bb alias ="b">String</bb> 
    <cc alias ="c">String</cc> 
</aa> 
<xx alias ="x"> 
    <bb alias ="b" >String</bb> 
    <cc alias ="c">String</cc> 
</xx> 

因此,爲了創建數據文件時,用戶可以使用的實際的標籤或別名標記如下所示

<a> 
    <bb>Some Data</bb> 
    <c>Some Data</c> 
</a> 
<xx> 
    <b>Some Data </b> 
    <c>Some Data </c> 
</xx> 

因此,現在的問題。當我保存數據時,我將需要使用原始密鑰而不是別名進行存儲,所以我可以使用一個好的算法或數據結構來獲得良好的性能。解決這個問題的原始方法是,對於每個鍵我檢查格式xml並確定它是否是真正的密鑰或別名。如果使用別名,我會得到原始密鑰。

Thanks a lot 
+0

爲什麼不在解析過程中解析別名?然後在您的應用程序中,您可以使用規範格式(真實標籤名稱)。順便說一句:我不知道爲什麼可能需要像上面這樣的XML格式? – home 2012-01-12 07:26:22

+1

爲什麼不使用[XML模式(XSD)](http://en.wikipedia.org/wiki/XML_Schema_(W3C))來定義XML的結構?這是標準和廣泛支持的方式。 – 2012-01-12 07:31:30

回答

0

一種解決方案是使用兩個數據結構,一組(即HashSet)和圖(即HashMap)。

該集合將具有所有定義的實際標籤,而該映射將具有別名鍵和實際標籤值。

要確定某個標籤是否爲實際標籤,您可以使用集合的contains方法(對於HashSet,O(1))。如果不是,請在地圖上使用get(alias)(O(1)for HashMap)獲取實際標籤。

如果有預先知道某個值是別名還是實際標記的方法,則該集合不是必需的。

+0

我曾考慮過使用HashMap,但問題是會有大量的鍵,例如使用上面的節點b的樣本,可能的密鑰是xx:b => bb,xx:bb => b,x:bb => b,x:b。希望我很清楚,因爲沒有辦法根據用戶數據創建密鑰查找,因爲除非我檢查其中的每一個,否則無法知道他們是否使用別名或真正的密鑰。 – tabiul 2012-01-12 09:16:55