Java 将XML结构解析为一组简单、通用的映射和列表

Java 将XML结构解析为一组简单、通用的映射和列表,java,xml-parsing,Java,Xml Parsing,有点相关,只是更一般 我有一个XML文档,我想将其转换为一组非常通用的键/值对(即Java)。基本思想是,我们可以解析几乎每个XML文档,并将其直接传递到JSP文件,JSP文件可以读取并显示这些值 假设有一个XML结构,如下所示: <root> <items> <item id="10">Some item here</item> </items> <things> <thing awesome

有点相关,只是更一般

我有一个XML文档,我想将其转换为一组非常通用的键/值对(即Java)。基本思想是,我们可以解析几乎每个XML文档,并将其直接传递到JSP文件,JSP文件可以读取并显示这些值

假设有一个XML结构,如下所示:

<root>
  <items>
   <item id="10">Some item here</item>
  </items>
  <things>
   <thing awesome="true">
    <orly-owl hoot="woot" />
   </thing>
  </things>
</root>

这里有些东西
输出将是一组包含值、列表和其他贴图的贴图对象。理想情况下,它是如何在(伪)JSP文件中读取的:

<c:forEach var="item" items="${root.items}">
  ${item.id}
  ${item.text}
</c:forEach>
<c:forEach var="things" items="${root.things}">
  Is it awesome? ${thing.awesome}
  orly? ${thing.orly-owl.hoot}
</c:forEach>

${item.id}
${item.text}
太棒了吗${太棒了}
奥利${东西。奥利猫头鹰。呜呜}
基本上,它是一个xml解析器,有一组简单的规则

对于每个XML实体:

它有子节点吗

将条目添加到映射中,节点名称作为键,列表(映射)作为值 它有属性或价值吗? 将条目添加到映射中,属性名称作为键,属性值作为值

…或者达到那种程度。我还没有正确地考虑数据结构

所以我的问题是:有没有现成的解析器可以这样做

我今天找到并试用的对象都映射到一个固定的对象层次结构,也就是说,您必须创建一个根对象,其中包含具有自己属性的项对象列表。这对per sé来说还不错(它可以基于(待编写/设计的)DTD对象自动生成),但我当前的任务是尝试这两个选项。尝试了第一个选项,一旦这些映射xml文件对我有意义,并且错误消息开始告诉我我做错了什么,但我还无法找出如何做第二个(读:编写递归的xml解析器(dom或sax)

这个问题可能没有连贯性,现在是五点钟


在仔细考虑之后进行编辑。它会起作用(即,将对象发送到JSP,其中可以包含值、映射和列表),但是在解析时会出现严重问题,例如在下一个示例中:

<root thing="thine mother">
  <thing mabob="yus" />
  <thing mabob="nay" />
  <items>
    <item id=1" />
  </items>
</root>


JDOM当然可以为您提供从元素构建的列表。该库已经存在了相当长的一段时间,并且非常易于使用。

应该在您的短列表中。这里有一个bief。

可以做到这一点,它是SAX解析器的包装器,允许您创建将数据解组到对象中的规则

如果您想知道如何进行递归解析,可以查看一种有趣的方法(使用递归转换网络)。其思想是创建一个对象网络,显示xml元素之间的关系,并在使用堆栈进行解析时跟踪您在该网络中的位置。

这似乎完全符合您的要求


使用列表和映射不太可能找到完全满足您需求的内容,这是因为XML不能很好地转换为列表和映射(主要是因为“如何以不同于内容的方式对待属性?”)。

“如何以不同于内容的方式对待属性?”?“我想我会对他们一视同仁。当然,这只与我的特殊情况有关,在这种情况下,内容通常只是纯文本。