Синтаксический анализ XML - DOM или SAX - сложный XML с атрибутами в качестве условий для доступа к иерархии в Java - PullRequest
0 голосов
/ 19 декабря 2011
    <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 ??

Простой сценарий получения значения тега с использованием доступа к атрибуту в качестве «кода» например, когда code = DOSCATNAME в теге, нам нужно взять данные для соответствующего тега.

Другой сценарий - получить доступ к тегу и получить атрибут иерархии и расширения доступа, когда атрибут assigningAuthorityName имеет значение PRMORDCODE.

Можно ли реализовать два вышеописанных сценария с помощью анализатора ??

Я новичок, пожалуйста, поймите, что мне нужно проанализировать и предложить мне мысль ... заранее спасибо ...

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Используйте JAXB.Создайте модель класса и соответствующим образом аннотируйте свои классы.Окружающая среда сделает все остальное.

Например, вы должны создать класс PlayingTestCodeDetails со свойствами classCode, determinerCode и т. Д.

Я скажу вам больше: вы можете попросить JAXB generate занятия для вас.Начните учиться по этой статье: http://www.roseindia.net/jaxb/r/jaxb.shtml

Это займет пару часов, но затем вы будете готовы через 15 минут.Если вы используете DOM, вы можете начать через 15 минут обучения и кодирования пару дней, чтобы проанализировать ваш XML.

0 голосов
/ 19 декабря 2011

Это зависит от вашей потребности, которую использовать.

И SAX, и DOM используются для анализа XML-документа. Оба имеют свои преимущества и недостатки и могут использоваться в наших программах в зависимости от ситуации.

SAX
• Анализирует узел за узлом
• Не сохраняет XML в памяти
• Мы не можем вставить или удалить узел
• SAX - это парсер, основанный на событиях
• SAX - это простой API для XML
• не сохраняет комментарии
• SAX обычно работает немного быстрее, чем DOM

DOM
• Сохраняет весь XML-документ в памяти перед обработкой
• Занимает больше памяти
• Мы можем вставить или удалить узлы
• Пройдите в любом направлении.
• DOM - синтаксический анализатор древовидной модели
• API объектной модели документов (DOM)
• Сохраняет комментарии
• SAX обычно работает немного быстрее, чем DOM

Если нам нужно найти узел и не нужно вставлять или удалять, мы можем использовать сам SAX, в противном случае DOM, если у нас будет больше памяти.

Это несколько парсеров: -

  1. Вудстокс
  2. dom4j

В дополнение к SAX и DOM существует синтаксический анализ STaX с использованием XMLStreamReader, который представляет собой синтаксический анализатор XML.

...