使用 SAX 解析器或 DOM 解析器解析 complexType?哪个更有效率?
Parsing complexType using SAX parser or DOM parser ? which one is more efficient?
我需要解析以下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: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 解析器 或者是否可以使用 SAX 解析器轻松解析 complexType。
难度:-
NodeList list = doc.getElementsByTagName("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
}
DOM 将整个 xml 作为树结构加载到内存中进行解析,而 SAX 使用基于事件的解析,因此 SAX 的性能优于 DOM。对于像这样的小 xml,您可以使用 DOM,以您认为容易的为准。
我需要解析以下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: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 解析器 或者是否可以使用 SAX 解析器轻松解析 complexType。
难度:-
NodeList list = doc.getElementsByTagName("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
}
DOM 将整个 xml 作为树结构加载到内存中进行解析,而 SAX 使用基于事件的解析,因此 SAX 的性能优于 DOM。对于像这样的小 xml,您可以使用 DOM,以您认为容易的为准。