[英]retrieving the values from the nested hashmap
我有一個包含許多表節點結構副本的XML文件,如下所示:
<databasetable TblID=”123” TblName=”Department1_mailbox”>
<SelectColumns>
<Slno>dept1_slno</Slno>
<To>dept1_to</To>
<From>dept1_from</From>
<Subject>dept1_sub</Subject>
<Body>dept1_body</Body>
<BCC>dept1_BCC</BCC>
<CC>dept1_CC</CC>
</SelectColumns>
<WhereCondition>MailSentStatus=’New’</WhereCondition>
<UpdateSuccess>
<MailSentStatus>’Yes’</MailSentStatus>
<MailSentFailedReason>’Mail Sent Successfully’</MailSentFailedReason>
</UpdateSuccess>
<UpdateFailure>
<MailSentStatus>’No’</MailSentStatus>
<MailSentFailedReason>’Mail Sending Failed ’</MailSentFailedReason>
</ UpdateFailure>
</databasetable>
因為每次遍歷文件以獲取程序中查詢的每個節點的細節不是一種有效的方式,所以我在第一次遍歷XML文件時使用嵌套的hashmap概念來存儲細節。 我使用的結構如下:
MapMaster
Key Value
123 MapDetails
Key Value
TblName Department1_mailbox
SelectColumns mapSelect
Key Value
Slno dept1_slno
To dept1_to
From dept1_from
Subject dept1_sub
Body dept1_body
BCC dept1_BCC
CC dept1_CC
WhereCondition MailSentStatus=’New’
UpdateSuccess mapUS
MailSentStatus ’Yes’
MailSentFailedReason ’Mail Sent Successfully’
UpdateFailure mapUF
MailSentStatus ’No’
MailSentFailedReason ’Mail Sending Failed’
但我現在面臨的問題是使用嵌套的密鑰檢索Value部分。 例如,
如果我需要Slno Key的值,我必須以嵌套的形式指定TblID,SelectColumns,Slno,如:
Stirng Slno = ((HashMap)((HashMap)mapMaster.get(“123”))mapDetails.get(“SelectColumns”))mapSelect.get(“Slno”);
這在程序中使用是不合理的。 請提出解決方案,但不要告訴迭代器可用。 因為我要根據程序的需要從地圖中獲取單個值。
編輯:我的程序必須獲取有權發送郵件的部門的ID,然后將這些ID與XML文件中的ID進行比較。 只從XML中獲取這些ID的信息,這些信息在比較時返回true。 這是我的全部計划。 請幫忙。
提前謝謝,Vishu
永遠不要轉換為特定的Map實現。 更好地使用轉換到Map接口,即((Map)one.get("foo")).get("bar")
不要在你的情況下使用鑄件。 您可以使用泛型定義集合,因此編譯器將為您工作:
Map <String,Map> one = new HashMap <String,Map>();
Map <String,Integer> two = new HashMap <String,Integer>();
現在你可以說:
int n = one.get("foo").get("bar");
沒有鑄造,沒有問題。
但更好的解決方案是根本不使用嵌套表。 創建自定義類,如SelectColumns
, WhereCondition
等。每個類應該有適當的私有字段,getter和setter。 現在解析這些類的XML創建實例。 然后使用getter遍歷數據結構。
順便說一句,如果您想使用JAXB,您幾乎不需要做任何事情! 類似於以下內容:
Unmarshaller u = JAXBContext.newInstance(SelectColumns.class, WhereCondition.class).createUnmarshaller();
SelectColumns[] columns = (SelectColumns[])u.unmarshal(in);
一種方法是生成包含元素或屬性的XML路徑的完全限定鍵。 這些鍵是唯一的,存儲在單個hashmap中,可以快速訪問元素。
您的代碼只需生成路徑的唯一文本表示,並根據鍵存儲和檢索xml元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.