Xml 使用SAX解析器或DOM解析器解析complexType?哪一个更有效?
我需要解析以下XSD片段Xml 使用SAX解析器或DOM解析器解析complexType?哪一个更有效?,xml,parsing,dom,xsd,sax,Xml,Parsing,Dom,Xsd,Sax,我需要解析以下XSD片段 <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: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>
给我所有的元素,甚至是complexType下的元素。那么,我如何获取complexType并在其下存储元素,然后处理其余信息。使用DOM解析器
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
}
NodeList cL=doc.getElementsByTagName(“xs:complexType”);
节点cN=cL.item(0);
NodeList cNC=cN.getChildNodes();
元素cE=(元素)cNC;
nodelistel=cE.getElementsByTagName(“xs:element”);
对于(int i=0;i
DOM将整个xml作为树结构加载到内存中进行解析,而SAX使用基于事件的解析,因此SAX比DOM具有更好的性能。对于像这样的小xml,您可以使用DOM,只要您觉得简单。您所说的“我很难解析complexType”到底是什么意思?你会怎么做?困难在于:-当我使用doc.getElementsByTagName(“xs:element”)时,它下面的元素和简单元素没有区别,我如何读取它们并将它们暂时存储在堆栈或队列中,然后使用它们?就时间而言,效率比机器性能而言更重要。因此,请使用JDOM2或XOM之类的工具。非常感谢!:)我在一个中使用了SAX解析器,在另一个中使用了DOM!:D
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
}