【问题标题】:retrieving the values from the nested hashmap从嵌套的哈希图中检索值
【发布时间】:2011-05-08 16:53:23
【问题描述】:

我有一个包含多个表节点结构副本的 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’

但我现在面临的问题是关于使用嵌套键检索值部分。例如,

如果我需要 Slno Key 的值,我必须以嵌套形式指定 TblID、SelectColumns、Slno,例如:

Stirng Slno = ((HashMap)((HashMap)mapMaster.get(“123”))mapDetails.get(“SelectColumns”))mapSelect.get(“Slno”);

这不适合在程序中使用。请提出解决方案,但不要告诉迭代器可用。因为我必须根据程序的需要从地图中获取单个值。

编辑:我的程序必须获取有权发送邮件的部门的 ID,然后将这些 ID 与 XML 文件中的 ID 进行比较。仅从返回 true 的 XML 中获取这些 ID 的信息。这就是我的全部程序。请帮忙。

提前致谢, 毗湿奴

【问题讨论】:

    标签: java xml key hashmap


    【解决方案1】:
    1. 从不强制转换为特定的 Map 实现。更好地使用转换为 Map 接口,即 ((Map)one.get("foo")).get("bar")

    2. 不要在你的情况下使用强制转换。您可以使用泛型定义集合,因此编译器将为您工作:

      Map one = new HashMap();

      Map 二 = new HashMap();

    现在你可以说:

    int n = one.get("foo").get("bar");

    没有强制转换,没有问题。

    但更好的解决方案是根本不使用嵌套表。创建您的自定义类,如SelectColumnsWhereCondition 等。每个类都应该有适当的私有字段、getter 和 setter。现在解析您的 XML 创建这些类的实例。然后使用 getter 遍历数据结构。

    顺便说一句,如果你想使用 JAXB,你几乎不需要做任何事情!类似于以下内容:

    Unmarshaller u = JAXBContext.newInstance(SelectColumns.class, WhereCondition.class).createUnmarshaller();
    SelectColumns[] columns = (SelectColumns[])u.unmarshal(in);
    

    【讨论】:

    • @AlexR- 请给我一些关于在我的程序中使用自定义类的想法吗?
    • 请您回复...我无法继续我的程序。
    【解决方案2】:

    一种方法是生成包含元素或属性的 XML 路径的完全限定键。这些键是唯一的,存储在单个哈希图中,让您快速找到元素。

    您的代码只需生成路径的唯一文本表示,并根据键存储和检索 xml 元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多