XML解析 - DOM或SAX - 具有属性作为访问java中层次结构的条件的复杂xml

时间:2011-12-19 08:11:42

标签: java xml dom sax

    <playingTestCodeDetails classCode="ENT" determinerCode="INSTANCE" >
                  <realmCode code="QD" />
                  <id assigningAuthorityName="PRMORDCODE" extension="16494"  />
                  <id assigningAuthorityName="TESTNUMINBOOK" extension="16494"  />
                  <code code="16494" codeSystemName="QTIM" displayName="SureSwab Candidiasis" /> 
                  <name  use=""></name>
                  <asSeeAlsoCode classCode="ROL" > <!-- Have repeated Seealsocode section for multiple see also codes and stripped names -->
                    <realmCode code="QD" />
                    <code code="7600" displayName="Sample See Also Name" ></code>
                  </asSeeAlsoCode>    
                  <asSeeAlsoCode classCode="ROL" >
                    <realmCode code="QD" />
                    <code code="6496" displayName="Sample See Also Name" ></code>
                  </asSeeAlsoCode>
                </playingTestCodeDetails>
<subjectOf  typeCode="SBJ">
              <realmCode code="QD" />
              <order classCode="OBS" moodCode="EVN" >
                <realmCode code="QD" />                              
                <performer nullFlavor="" typeCode="PRF"><!-- Have added this to accomodate the UnitCode-->
                  <performingLocatedEntity classCode="LOCE" nullFlavor="">
                    <locatedPerformingSite classCode="ORG" determinerCode="INSTANCE">
                      <id assigningAuthorityName="ASORDERED" extension="16494" />
                     </locatedPerformingSite>
                  </performingLocatedEntity>
                 </performer> 
                <origin nullFlavor="" typeCode="ORG"> <!-- Have added this to accomodate the Ordering Lab Code-->
                    <orderingLocatedEntity classCode="LOCE" >
                       <locatedOrderingSite classCode="ORG" determinerCode="INSTANCE">
                        <id assigningAuthorityName="PRMORDCODE"  extension="16494"/>
                        <code code="SJC" codeSystemName="QTIM" codeSystem="ORDERINGLABCODE"/>
                       </locatedOrderingSite>
                    </orderingLocatedEntity>
                </origin>  
                <pertinentInformation1 typeCode="PERT">
                    <realmCode code="QD" /> 
                    <clinicalInfo classCode="ACT" moodCode="EVN">
                      <realmCode code="QD" /> 
                      <title>Specialitysample1</title> 
                       <text>Conditionsample1</text> 
                    </clinicalInfo>
                </pertinentInformation1>
                <subjectOf  typeCode="SUBJ">
                  <realmCode code="QD" />
                  <annotation classCode="ACT" moodCode="EVN" >
                    <realmCode code="QD" />
                    <code code="DOSCATNAME"></code>
                    <text><![CDATA[SureSwab<sup>&reg;</sup>, <em>Candidiasis</em>, PCR]]></text>
                  </annotation>
                </subjectOf>
</subjectOf>

我有一个看起来像上面的xml。我想解析它;什么是解析它的最佳方法? DOM,SAX(我听说过JAXB,XSLT,......不确定这两个);我们可以结合使用DOM和SAX解析XML ??

使用属性访问作为“代码”获取标记值的简单方案 比如当代码中的代码= DOSCATNAME时,我们需要获取相应标签的数据。

其他方案是访问标记并获取当assigningAuthorityName属性具有值PRMORDCODE时的层次结构和访问扩展属性。

使用Parser可以实现上述两种情况吗?

我是新手,请理解我需要解析的内容建议我一个想法...提前感谢...

2 个答案:

答案 0 :(得分:1)

使用JAXB。创建类模型并适当地注释您的类。环境将完成剩下的工作。

例如,您应该创建包含属性PlayingTestCodeDetailsclassCode等的类determinerCode

我会告诉你更多:你可以请求JAXB 为你生成类。从这篇文章开始学习:http://www.roseindia.net/jaxb/r/jaxb.shtml

这需要几个小时才能开始,但比你将在15分钟内完成。如果您正在使用DOM,您可以在15分钟的学习时间内开始编程,并在几天内编写解析XML的代码。

答案 1 :(得分:0)

这取决于您的使用需求。

SAX和DOM都用于解析XML文档。两者都有优点和缺点,可根据具体情况用于编程。

SAX
•逐节点解析 •不将XML存储在内存中 •我们无法插入或删除节点
•SAX是基于事件的解析器
•SAX是XML的简单API •不保留评论
•SAX通常比DOM更快地运行

<强> DOM
•在处理之前将整个XML文档存储到内存中 •占用更多内存
•我们可以插入或删除节点
•沿任何方向移动。
•DOM是树模型解析器
•文档对象模型(DOM)API
•保留评论
•SAX通常比DOM更快地运行

如果我们需要找到一个节点而不需要插入或删除,我们可以使用SAX本身,否则DOM提供了更多的内存。

这些是很少的解析器: -

  1. woodstox
  2. dom4j
  3. 除了SAX和DOM之外,还可以使用XMLStreamReader进行STaX解析,这是一个xml pull解析器。