2015-05-28 4 views
0

мне нужно разборе следующее XSD сниппетаАнализ синтаксического анализа с использованием анализатора SAX или анализатора DOM? какой из них более эффективен?

<xs:element name="BANT" type="tns:B"/>  
    <xs:complexType name="InqRq_Type"> 
    <xs:sequence> 
     <xs:element name="Header" type="tns:Rq"/> 
     <xs:element name="Data" type="tns:InqRqData_Type"/> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="RqHeader_Type"> 
    <xs:sequence> 
     <xs:element name="Filler1" minOccurs="0" > 
      <xs:simpleType > 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="1"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="MsgLen" minOccurs="0" > 
      <xs:simpleType > 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="4"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="Filler2" minOccurs="0" > 
      <xs:simpleType > 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="2"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="MsgType" minOccurs="0" > 
      <xs:simpleType > 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="2"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="Filler3" minOccurs="0" > 
      <xs:simpleType > 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="4"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
     <xs:element name="CycleNum" minOccurs="0" > 
      <xs:simpleType > 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="6"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="MsgNum" minOccurs="0" > 
      <xs:simpleType > 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="6"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 

Если я разобрать его с помощью SAX парсер Я с трудом разборе ComplexType.

Следует использовать анализатор DOM или есть способ легко разобрать complexType с помощью анализатора SAX.

Сложность: -

 NodeList list = doc.getElementsByTagName("xs:element"); 

дает мне все элементы, даже те под ComplexType. Итак, как мне взять complexType и хранить элементы под ним, а затем обрабатывать остальную информацию.

+0

Что вы имеете в виду именно с "* У меня возникли трудности с разбором complexType *"? Что бы вы сделали? – potame

+0

трудность: - Элементы под ним и простые элементы не дифференцируются, когда я использую doc.getElementsByTagName ("xs: element") Итак, как я их читаю и сохраняю их в стеке или очереди временно а затем использовать его? – Aishwarya

+1

Эффективность с точки зрения вашего времени намного важнее эффективности с точки зрения производительности машины. Поэтому используйте что-то вроде JDOM2 или XOM. –

ответ

1

Использование DOM Parser,

NodeList cL = doc.getElementsByTagName("xs:complexType"); 
    Node cN= cL.item(0); 
    NodeList cNC= cN.getChildNodes(); 
    Element cE =(Element) cNC; 


    NodeList eL=cE.getElementsByTagName("xs:element"); 
    for (int i = 0; i < eL.getLength(); i++)   
     { 
     Node eN = eL.item(i);      // ith element 
     NodeList eNC= eN.getChildNodes(); 
     Element eE= (Element) eNC;    
     //extract elements values here or loop other nodes like this    
     } 

DOM загружает весь XML в древовидной структуре в памяти для разбора в то время как SAX использует синтаксический анализ на основе событий, так SAX дает хорошую производительность по сравнению с DOM. Для небольших xml, подобных этому, вы можете использовать DOM, в зависимости от того, что вам станет проще.

+0

Спасибо большое! :) Я использовал SAX-парсер в одном и DOM в другом! : D – Aishwarya

Смежные вопросы