解析Java中的一个大的XML节点 [英] Parse a big XML node in Java

查看:256
本文介绍了解析Java中的一个大的XML节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在被使用ActionScript 3的XML解析的方法,我觉得解析小铺天盖地的Java方法。使用E4X我可以用点符号和标记的名称以及条件我能达到我所要求的节点。我可以看到在Java中没有这样的选择,我在分析他们大多不超出基本检查网上的例子很多的帮助。

我是在正确的道路使用DOM解析器或者我应该尝试一些其他的解析器XML?

我有相当大的XML文件(我砍倒FIT)必须加以解析。

我怎样才能在XML节点CANDELA价值 - > ECUDOC - > ECU - > VAR - > DIAGCLASS - > DIAGINST?是否有可能得到在ActionScript中设置节点的XMLList的?

 的DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder的建设者= NULL;
        尝试 {
            建设者= builderFactory.newDocumentBuilder();
            文献文件= builder.parse(新的FileInputStream(pathToXML));

            节点列表节点= document.getElementsByTagName(*);

            的for(int i = 0; I< nodes.getLength();我++){
                的System.out.println(nodes.item(ⅰ).getNodeName());
            }
            的System.out.println(对ECU根据孩子的号码+ nodes.getLength());
        }赶上(的ParserConfigurationException E){
            e.printStackTrace();
        }

< XML版本=1.0编码=ISO-8859-1独立='没有'&GT?;
<!DOCTYPE CANDELA系统candela.dtd'&GT​​;
< CANDELA dtdvers ='2.0.5'>
    < ECUDOC DOCTYPE ='研究院'制造商='无'中='323232'saveno = '59'语言='(EN-US,德-DE)uptodateLanguages​​ ='(EN-US)'jobfileext =''&GT ;
        < ATTRCATS>
            < ATTRCAT ID ='_ 0x01ded158'>
                <名称>
                    < TUV XML:LANG =EN-US>时间< / TUV>
                    < TUV XML:LANG =去DE'>时代周报< / TUV>
                < /名称>
                < QUAL>时代周报< / QUAL>
            < / ATTRCAT>
        < / ATTRCATS>
        <作者>
            <作者ID ='_ 0x01dfae70OBS ='0'>
                < LASTNAME>拉茨< / LASTNAME>
                < FIRSTNAME>克里斯托弗< / FIRSTNAME>
            < /作者:GT;
        < /作者:GT;
        < ECU ID ='_ 0x01da31c8'>
            <名称>
                < TUV XML:LANG =EN-US>任何ECU例如< / TUV>
                < TUV XML:LANG =去DE'>艾因Beispiel-Steuergerät< / TUV>
            < /名称>
            < D​​ESC>
                < TUV XML:LANG =EN-US结构='1'>
                   < PARA>
                        &其中; FC>这是一个制造商独立例子来说明CANdelaStudio的用法&所述; / FC>
                    < / PARA>
                    < PARA>
                        < FC>< / FC>
                    < / PARA>
                    < PARA>
                        &其中; FC>该实施例是基于向量的文档模板(制造商独立)所述; / FC>
                    < / PARA>
                    < PARA>
                        < FC>作为一个具体的项目,我们建议使用制造商特定的文档模板,必须由向量的时候生成< / FC>
                    < / PARA>
                < / TUV>
                < TUV XML:LANG =去DE'结构='1'>
                    < PARA>
                        < FC>模具IST EINherstellerunabhängigesBeispiel。居zeigt死Verwendung冯CANdelaStudio< / FC>
                    < / PARA>
                    < PARA>
                        < FC>< / FC>
                    < / PARA>
                    < PARA>
                        < FC>达斯Beispiel basiert奥夫DER Hersteller-unabhängigen矢量Dokumentvorlage< / FC>
                    < / PARA>
                    < PARA>
                        < FC>毛皮EIN konkretes Projekt的sollten SIE EINE Hersteller-spezifische Dokumentvorlage verwenden。 Diese wird(楚时代周报NOCH)冯矢量erstellt< / FC>
                    < / PARA>
                < / TUV>
            < / DESC>
            < QUAL> Any_ECU_example< / QUAL>
            < UNS attrref ='_ 0x01233bc8'V ='513'/>
            < UNS attrref ='_ 0x01235af8'V ='1025'/>
            &所述; ENUM attrref =_ 0x01ddc9c0'ν='0'/>
            < VAR ID ='_ 0x01dae6f0'基地='1'>
                <名称>
                    < TUV XML:LANG =EN-US>共同诊断和LT; / TUV>
                    < TUV XML:LANG =去DE'> Grundumfang< / TUV>
                < /名称>
                < D​​ESC>
                    < TUV XML:LANG =EN-US结构='1'>
                        < PARA>
                            < FC FS ='0'>基本型号其中ECU的所有变体必须支持< / FC>
                        < / PARA>
                    < / TUV>
                    < TUV XML:LANG =去DE'结构='1'>
                        < PARA>
                            < FC FS ='0'> Grundumfang,书房全部Varianten德Steuergerätesunterstützen< / FC>
                        < / PARA>
                    < / TUV>
                < / DESC>
                < QUAL> COMMON_DIAGNOSTICS< / QUAL>
                < D​​IAGCLASS ID ='_ 0x01db0320'tmplref ='_ 0x01dce558'>
                    <名称>
                        < TUV XML:LANG =EN-US>启动会话和LT; / TUV>
                        < TUV XML:LANG =去DE'> Sitzungen starten< / TUV>
                    < /名称>
                    < QUAL> START_SESSION< / QUAL>
                    < D​​IAGINST ID ='_ 0x01dd0598'tmplref ='_ 0x01dce558REQ ='0'>
                        <名称>
                            < TUV XML:LANG =EN-US>默认会话(车载诊断系统)LT; / TUV>
                            < TUV XML:LANG =去DE'>默认会话(车载诊断系统)LT; / TUV>
                        < /名称>
                        < QUAL> DEFAULT_SESSION< / QUAL>
                        <服务ID ='_ 0x01dd0720'tmplref ='_ 0x01dce630FUNC ='0'物理='1'mresp ='0'respOnPhys ='1'respOnFunc ='0'REQ ='0'>
                            <名称>
                                < TUV XML:LANG =EN-US>启动< / TUV>
                                < TUV XML:LANG =去DE'> Starten< / TUV>
                            < /名称>
                            < QUAL>启动< / QUAL>
                        < /服务>
                        < STATICVALUE shstaticref ='_ 0x01dbebb0'V ='129'/>
                        < SIMPLECOMPCONT shproxyref ='_ 0x01dbec18'>
                            < SPECDATAOBJ ID ='_ 0x01dfd658规范='遥控'>
                                <名称>
                                    < TUV XML:LANG =EN-US>阴性反应codeS< / TUV>
                                    < TUV XML:LANG =去DE'>阴性反应codeS< / TUV>
                                < /名称>
                                < QUAL> NRC< / QUAL>
                                < TEXTTBL ID ='_ 0x01dda9c8BM ='4294967295'>
                                    <名称>
                                        < TUV XML:LANG =EN-US> LocalTable< / TUV>
                                        < TUV XML:LANG =去DE'> LocalTable< / TUV>
                                    < /名称>
                                    < QUAL> LocalTable< / QUAL>
                                    < CVALUETYPE BL =8博= '21'ENC ='UNS'SIG ='0'DF ='十六进制'数量='原子'SZ ='没有'minsz ='0'maxsz =255/&GT ;
                                    < PVALUETYPE BL =8博= '21'ENC ='ASC'SIG ='0'DF ='文本'数量='场'SZ ='没有'minsz ='0'maxsz =255/&GT ;
                                    < TEXTMAP S = '16'E =16>
                                        < TEXT>
                                            < TUV XML:LANG =EN-US>常规拒绝< / TUV>
                                            < TUV XML:LANG =去DE'>汇报Verweigerung< / TUV>
                                        < /文字>
                                    < / TEXTMAP>
                                    < TEXTMAP S = '18'E ='18'>
                                        < TEXT>
                                            < TUV XML:LANG =EN-US>子功能不支持 - 无效的格式< / TUV>
                                            < TUV XML:LANG =去DE'> Unterfunktion nichtunterstützt奥德ungültiges格式< / TUV>
                                        < /文字>
                                    < / TEXTMAP>
                                    < TEXTMAP S ='120'E ='120'>
                                        < TEXT>
                                            < TUV XML:LANG =EN-US>请求正确接收 - 响应挂起< / TUV>
                                            < TUV XML:LANG =去DE'> Anforderung erhalten  -  Antwort steht澳大利亚和LT; / TUV>
                                        < /文字>
                                    < / TEXTMAP>
                                    < TEXTMAP S ='128'E ='128'>
                                        < TEXT>
                                            < TUV XML:LANG =EN-US>服务不支持主动诊断模式< / TUV>
                                            < TUV XML:LANG =去DE'>在aktiver会议&LT服务nichtunterstützt; / TUV>
                                        < /文字>
                                    < / TEXTMAP>
                                < / TEXTTBL>
                            < / SPECDATAOBJ>
                        < / SIMPLECOMPCONT>
                    < / DIAGINST>
                    < D​​IAGINST ID ='_ 0x01dd1520'tmplref ='_ 0x01dce558REQ ='0'>
                        <名称>
                            < TUV XML:LANG =EN-US>编程会话< / TUV>
                            < TUV XML:LANG =去DE'>编程会话< / TUV>
                        < /名称>
                        < QUAL> ProgrammingSession< / QUAL>
                        <服务ID ='_ 0x01dd1660'tmplref ='_ 0x01dce630FUNC ='0'物理='1'mresp ='0'respOnPhys ='1'respOnFunc ='0'REQ ='0'>
                            <名称>
                                < TUV XML:LANG =EN-US>启动< / TUV>
                                < TUV XML:LANG =去DE'> Starten< / TUV>
                            < /名称>
                            < QUAL>启动< / QUAL>
                        < /服务>
                        < STATICVALUE shstaticref ='_ 0x01dbebb0'V ='133'/>
                        < SIMPLECOMPCONT shproxyref ='_ 0x01dbec18'>
                            < SPECDATAOBJ ID ='_ 0x01daf378规范='遥控'>
                                <名称>
                                    < TUV XML:LANG =EN-US>阴性反应codeS< / TUV>
                                    < TUV XML:LANG =去DE'>阴性反应codeS< / TUV>
                                < /名称>
                                < QUAL> NRC< / QUAL>
                                < TEXTTBL ID ='_ 0x01dd9da8BM ='4294967295'>
                                    <名称>
                                        < TUV XML:LANG =EN-US> LocalTable< / TUV>
                                        < TUV XML:LANG =去DE'> LocalTable< / TUV>
                                    < /名称>
                                    < QUAL> LocalTable< / QUAL>
                                    < CVALUETYPE BL =8博= '21'ENC ='UNS'SIG ='0'DF ='十六进制'数量='原子'SZ ='没有'minsz ='0'maxsz =255/&GT ;
                                    < PVALUETYPE BL =8博= '21'ENC ='ASC'SIG ='0'DF ='文本'数量='场'SZ ='没有'minsz ='0'maxsz =255/&GT ;
                                    < TEXTMAP S = '16'E =16>
                                        < TEXT>
                                            < TUV XML:LANG =EN-US>常规拒绝< / TUV>
                                            < TUV XML:LANG =去DE'>汇报Verweigerung< / TUV>
                                        < /文字>
                                    < / TEXTMAP>
                                    < TEXTMAP S = '18'E ='18'>
                                        < TEXT>
                                            < TUV XML:LANG =EN-US>子功能不支持 - 无效的格式< / TUV>
                                            < TUV XML:LANG =去DE'> Unterfunktion nichtunterstützt奥德ungültiges格式< / TUV>
                                        < /文字>
                                    < / TEXTMAP>
                                    < TEXTMAP S ='120'E ='120'>
                                        < TEXT>
                                            < TUV XML:LANG =EN-US>请求正确接收 - 响应挂起< / TUV>
                                            < TUV XML:LANG =去DE'> Anforderung erhalten  -  Antwort steht澳大利亚和LT; / TUV>
                                        < /文字>
                                    < / TEXTMAP>
                                    < TEXTMAP S ='128'E ='128'>
                                        < TEXT>
                                            < TUV XML:LANG =EN-US>服务不支持主动诊断模式< / TUV>
                                            < TUV XML:LANG =去DE'>在aktiver会议&LT服务nichtunterstützt; / TUV>
                                        < /文字>
                                    < / TEXTMAP>
                                < / TEXTTBL>
                            < / SPECDATAOBJ>
                        < / SIMPLECOMPCONT>
                    < / DIAGINST>
                < / DIAGCLASS>
                < D​​IAGINST ID ='_ 0x01dd2458'tmplref ='_ 0x01dbec98REQ ='0'>
                    <名称>
                        < TUV XML:LANG =EN-US>停止会议< / TUV>
                        < TUV XML:LANG =去DE'> Sitzungen beenden< / TUV>
                    < /名称>
                    < QUAL> STOP_SESSION< / QUAL>
                    <服务ID ='_ 0x01dd2598'tmplref ='_ 0x01dbed70FUNC ='0'物理='1'mresp ='0'respOnPhys ='1'respOnFunc ='0'REQ ='0'>
                        <名称>
                            < TUV XML:LANG =EN-US>停止< / TUV>
                            < TUV XML:LANG =去DE'> Beenden< / TUV>
                        < /名称>
                        < QUAL>停止< / QUAL>
                    < /服务>
                    < SIMPLECOMPCONT shproxyref ='_ 0x01dbee18'>
                        < SPECDATAOBJ ID ='_ 0x01dda908规范='遥控'>
                            <名称>
                                < TUV XML:LANG =EN-US>阴性反应codeS< / TUV>
                                < TUV XML:LANG =去DE'>阴性反应codeS< / TUV>
                            < /名称>
                            < QUAL> NRC< / QUAL>
                            < TEXTTBL ID ='_ 0x01237e70BM ='4294967295'>
                                <名称>
                                    < TUV XML:LANG =EN-US> LocalTable< / TUV>
                                    < TUV XML:LANG =去DE'> LocalTable< / TUV>
                                < /名称>
                                < QUAL> LocalTable< / QUAL>
                                < CVALUETYPE BL =8博= '21'ENC ='UNS'SIG ='0'DF ='十六进制'数量='原子'SZ ='没有'minsz ='0'maxsz =255/&GT ;
                                < PVALUETYPE BL =8博= '21'ENC ='ASC'SIG ='0'DF ='文本'数量='场'SZ ='没有'minsz ='0'maxsz =255/&GT ;
                                < TEXTMAP S = '16'E =16>
                                    < TEXT>
                                        < TUV XML:LANG =EN-US>常规拒绝< / TUV>
                                        < TUV XML:LANG =去DE'>汇报Verweigerung< / TUV>
                                    < /文字>
                                < / TEXTMAP>
                                < TEXTMAP S = '18'E ='18'>
                                    < TEXT>
                                        < TUV XML:LANG =EN-US>子功能不支持 - 无效的格式< / TUV>
                                        < TUV XML:LANG =去DE'> Unterfunktion nichtunterstützt奥德ungültiges格式< / TUV>
                                    < /文字>
                                < / TEXTMAP>
                                < TEXTMAP S ='120'E ='120'>
                                    < TEXT>
                                        < TUV XML:LANG =EN-US>请求正确接收 - 响应挂起< / TUV>
                                        < TUV XML:LANG =去DE'> Anforderung erhalten  -  Antwort steht澳大利亚和LT; / TUV>
                                    < /文字>
                                < / TEXTMAP>
                                < TEXTMAP S ='128'E ='128'>
                                    < TEXT>
                                        < TUV XML:LANG =EN-US>服务不支持主动诊断模式< / TUV>
                                        < TUV XML:LANG =去DE'>在aktiver会议&LT服务nichtunterstützt; / TUV>
                                    < /文字>
                                < / TEXTMAP>
                            < / TEXTTBL>
                        < / SPECDATAOBJ>
                    < / SIMPLECOMPCONT>
                < / DIAGINST>
            < / VAR>
        < / ECU>
    < / ECUDOC>
< / CANDELA>
 

解决方案

如果你使用DOM解析在ActionScript中同样大小的数据,那么你可以使用DOM解析Java中;但是,我不建议使用标准的W3C的API,它是旧的,笨拙的。现代DOM库,如jdom2将提供更多的灵活性,如检索子节点的名字。下面是一个使用jdom2一个例子。所有getChild()调用当然可以由XPath取代。

 文档文档=新的SAXBuilder()建(新建文件(CANDELA.xml))。
名单<组件>表= doc.getRootElement()
        .getChild(ECUDOC)
        .getChild(ECU)
        .getChild(VAR)
        .getChild(DIAGCLASS)
        .getChildren(DIAGINST);
的System.out.println(则为list.size()+DIAGINST节点);

对于(Element节点:列表){
    的System.out.println(node.getAttribute(ID)。的getValue()
            +=+ node.getChildText(QUAL));
}
 

Having been used to Actionscript 3 XML parsing approach I find Java way of parsing little overwhelming. Using E4X I could have used dot notation and tag name along with conditions I can reach the node I required. I could see no such option in Java, I checked many examples online with help in parsing most of them do not go beyond the basics.

Am I on right path with DOM parser or should I try some other parser for XML?

I have quite a big XML file (which I cut down to fit) which has to be parsed.

How can I get value in XML node CANDELA -> ECUDOC -> ECU -> VAR -> DIAGCLASS -> DIAGINST? Is it possible get set of nodes as XMLList in Actionscript?

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        try {
            builder = builderFactory.newDocumentBuilder();
            Document document = builder.parse(new FileInputStream("pathToXML"));

            NodeList nodes = document.getElementsByTagName("*");

            for(int i = 0; i < nodes.getLength(); i++){
                System.out.println(nodes.item(i).getNodeName());
            }
            System.out.println("Number of childs under ECU "+ nodes.getLength());
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }

<?xml version='1.0' encoding='iso-8859-1' standalone='no'?>
<!DOCTYPE CANDELA SYSTEM 'candela.dtd'>
<CANDELA dtdvers='2.0.5'>
    <ECUDOC doctype='inst' manufacturer='no' mid='323232' saveno='59' languages='(en-US,de-DE)' uptodateLanguages='(en-US)' jobfileext=''>
        <ATTRCATS>
            <ATTRCAT id='_0x01ded158'>
                <NAME>
                    <TUV xml:lang='en-US'>Time</TUV>
                    <TUV xml:lang='de-DE'>Zeit</TUV>
                </NAME>
                <QUAL>Zeit</QUAL>
            </ATTRCAT>
        </ATTRCATS>
        <AUTHORS>
            <AUTHOR id='_0x01dfae70' obs='0'>
                <LASTNAME>Rätz</LASTNAME>
                <FIRSTNAME>Christoph</FIRSTNAME>
            </AUTHOR>
        </AUTHORS>
        <ECU id='_0x01da31c8'>
            <NAME>
                <TUV xml:lang='en-US'>Any ECU example</TUV>
                <TUV xml:lang='de-DE'>Ein Beispiel-Steuergerät</TUV>
            </NAME>
            <DESC>
                <TUV xml:lang='en-US' struct='1'>
                   <PARA>
                        <FC>This is an manufacturer independent example to demonstrate the usage of CANdelaStudio.</FC>
                    </PARA>
                    <PARA>
                        <FC></FC>
                    </PARA>
                    <PARA>
                        <FC>This example is based on the Vector document template (manufacturer independent).</FC>
                    </PARA>
                    <PARA>
                        <FC>For a concrete project, we recommend to use a manufacturer specific document template, which must be generated by Vector at the time.</FC>
                    </PARA>
                </TUV>
                <TUV xml:lang='de-DE' struct='1'>
                    <PARA>
                        <FC>Dies ist ein herstellerunabhängiges Beispiel. Es zeigt die Verwendung von CANdelaStudio.</FC>
                    </PARA>
                    <PARA>
                        <FC></FC>
                    </PARA>
                    <PARA>
                        <FC>Das Beispiel basiert auf der Hersteller-unabhängigen Vector-Dokumentvorlage.</FC>
                    </PARA>
                    <PARA>
                        <FC>Für ein konkretes Projekt sollten Sie eine Hersteller-spezifische Dokumentvorlage verwenden. Diese wird (zur Zeit noch) von Vector erstellt.</FC>
                    </PARA>
                </TUV>
            </DESC>
            <QUAL>Any_ECU_example</QUAL>
            <UNS attrref='_0x01233bc8' v='513'/>
            <UNS attrref='_0x01235af8' v='1025'/>
            <ENUM attrref='_0x01ddc9c0' v='0'/>
            <VAR id='_0x01dae6f0' base='1'>
                <NAME>
                    <TUV xml:lang='en-US'>Common Diagnostics</TUV>
                    <TUV xml:lang='de-DE'>Grundumfang</TUV>
                </NAME>
                <DESC>
                    <TUV xml:lang='en-US' struct='1'>
                        <PARA>
                            <FC fs='0'>Base model which all variants of the ECU must support</FC>
                        </PARA>
                    </TUV>
                    <TUV xml:lang='de-DE' struct='1'>
                        <PARA>
                            <FC fs='0'>Grundumfang, den alle Varianten des Steuergerätes unterstützen</FC>
                        </PARA>
                    </TUV>
                </DESC>
                <QUAL>COMMON_DIAGNOSTICS</QUAL>
                <DIAGCLASS id='_0x01db0320' tmplref='_0x01dce558'>
                    <NAME>
                        <TUV xml:lang='en-US'>Start Session</TUV>
                        <TUV xml:lang='de-DE'>Sitzungen starten</TUV>
                    </NAME>
                    <QUAL>START_SESSION</QUAL>
                    <DIAGINST id='_0x01dd0598' tmplref='_0x01dce558' req='0'>
                        <NAME>
                            <TUV xml:lang='en-US'>Default Session (OBDII)</TUV>
                            <TUV xml:lang='de-DE'>Default Session (OBDII)</TUV>
                        </NAME>
                        <QUAL>DEFAULT_SESSION</QUAL>
                        <SERVICE id='_0x01dd0720' tmplref='_0x01dce630' func='0' phys='1' mresp='0' respOnPhys='1' respOnFunc='0' req='0'>
                            <NAME>
                                <TUV xml:lang='en-US'>Start</TUV>
                                <TUV xml:lang='de-DE'>Starten</TUV>
                            </NAME>
                            <QUAL>Start</QUAL>
                        </SERVICE>
                        <STATICVALUE shstaticref='_0x01dbebb0' v='129'/>
                        <SIMPLECOMPCONT shproxyref='_0x01dbec18'>
                            <SPECDATAOBJ id='_0x01dfd658' spec='rc'>
                                <NAME>
                                    <TUV xml:lang='en-US'>Negative response codes</TUV>
                                    <TUV xml:lang='de-DE'>Negative response codes</TUV>
                                </NAME>
                                <QUAL>NRC</QUAL>
                                <TEXTTBL id='_0x01dda9c8' bm='4294967295'>
                                    <NAME>
                                        <TUV xml:lang='en-US'>LocalTable</TUV>
                                        <TUV xml:lang='de-DE'>LocalTable</TUV>
                                    </NAME>
                                    <QUAL>LocalTable</QUAL>
                                    <CVALUETYPE bl='8' bo='21' enc='uns' sig='0' df='hex' qty='atom' sz='no' minsz='0' maxsz='255'/>
                                    <PVALUETYPE bl='8' bo='21' enc='asc' sig='0' df='text' qty='field' sz='no' minsz='0' maxsz='255'/>
                                    <TEXTMAP s='16' e='16'>
                                        <TEXT>
                                            <TUV xml:lang='en-US'>General reject</TUV>
                                            <TUV xml:lang='de-DE'>Allgemeine Verweigerung</TUV>
                                        </TEXT>
                                    </TEXTMAP>
                                    <TEXTMAP s='18' e='18'>
                                        <TEXT>
                                            <TUV xml:lang='en-US'>Subfunction not supported - invalid format</TUV>
                                            <TUV xml:lang='de-DE'>Unterfunktion nicht unterstützt oder ungültiges Format</TUV>
                                        </TEXT>
                                    </TEXTMAP>
                                    <TEXTMAP s='120' e='120'>
                                        <TEXT>
                                            <TUV xml:lang='en-US'>Request correctly received - response pending</TUV>
                                            <TUV xml:lang='de-DE'>Anforderung erhalten - Antwort steht aus</TUV>
                                        </TEXT>
                                    </TEXTMAP>
                                    <TEXTMAP s='128' e='128'>
                                        <TEXT>
                                            <TUV xml:lang='en-US'>Service not supported in active diagnostic mode</TUV>
                                            <TUV xml:lang='de-DE'>Service nicht unterstützt in aktiver Session</TUV>
                                        </TEXT>
                                    </TEXTMAP>
                                </TEXTTBL>
                            </SPECDATAOBJ>
                        </SIMPLECOMPCONT>
                    </DIAGINST>
                    <DIAGINST id='_0x01dd1520' tmplref='_0x01dce558' req='0'>
                        <NAME>
                            <TUV xml:lang='en-US'>Programming Session</TUV>
                            <TUV xml:lang='de-DE'>Programming Session</TUV>
                        </NAME>
                        <QUAL>ProgrammingSession</QUAL>
                        <SERVICE id='_0x01dd1660' tmplref='_0x01dce630' func='0' phys='1' mresp='0' respOnPhys='1' respOnFunc='0' req='0'>
                            <NAME>
                                <TUV xml:lang='en-US'>Start</TUV>
                                <TUV xml:lang='de-DE'>Starten</TUV>
                            </NAME>
                            <QUAL>Start</QUAL>
                        </SERVICE>
                        <STATICVALUE shstaticref='_0x01dbebb0' v='133'/>
                        <SIMPLECOMPCONT shproxyref='_0x01dbec18'>
                            <SPECDATAOBJ id='_0x01daf378' spec='rc'>
                                <NAME>
                                    <TUV xml:lang='en-US'>Negative response codes</TUV>
                                    <TUV xml:lang='de-DE'>Negative response codes</TUV>
                                </NAME>
                                <QUAL>NRC</QUAL>
                                <TEXTTBL id='_0x01dd9da8' bm='4294967295'>
                                    <NAME>
                                        <TUV xml:lang='en-US'>LocalTable</TUV>
                                        <TUV xml:lang='de-DE'>LocalTable</TUV>
                                    </NAME>
                                    <QUAL>LocalTable</QUAL>
                                    <CVALUETYPE bl='8' bo='21' enc='uns' sig='0' df='hex' qty='atom' sz='no' minsz='0' maxsz='255'/>
                                    <PVALUETYPE bl='8' bo='21' enc='asc' sig='0' df='text' qty='field' sz='no' minsz='0' maxsz='255'/>
                                    <TEXTMAP s='16' e='16'>
                                        <TEXT>
                                            <TUV xml:lang='en-US'>General reject</TUV>
                                            <TUV xml:lang='de-DE'>Allgemeine Verweigerung</TUV>
                                        </TEXT>
                                    </TEXTMAP>
                                    <TEXTMAP s='18' e='18'>
                                        <TEXT>
                                            <TUV xml:lang='en-US'>Subfunction not supported - invalid format</TUV>
                                            <TUV xml:lang='de-DE'>Unterfunktion nicht unterstützt oder ungültiges Format</TUV>
                                        </TEXT>
                                    </TEXTMAP>
                                    <TEXTMAP s='120' e='120'>
                                        <TEXT>
                                            <TUV xml:lang='en-US'>Request correctly received - response pending</TUV>
                                            <TUV xml:lang='de-DE'>Anforderung erhalten - Antwort steht aus</TUV>
                                        </TEXT>
                                    </TEXTMAP>
                                    <TEXTMAP s='128' e='128'>
                                        <TEXT>
                                            <TUV xml:lang='en-US'>Service not supported in active diagnostic mode</TUV>
                                            <TUV xml:lang='de-DE'>Service nicht unterstützt in aktiver Session</TUV>
                                        </TEXT>
                                    </TEXTMAP>
                                </TEXTTBL>
                            </SPECDATAOBJ>
                        </SIMPLECOMPCONT>
                    </DIAGINST>
                </DIAGCLASS>
                <DIAGINST id='_0x01dd2458' tmplref='_0x01dbec98' req='0'>
                    <NAME>
                        <TUV xml:lang='en-US'>Stop Session</TUV>
                        <TUV xml:lang='de-DE'>Sitzungen beenden</TUV>
                    </NAME>
                    <QUAL>STOP_SESSION</QUAL>
                    <SERVICE id='_0x01dd2598' tmplref='_0x01dbed70' func='0' phys='1' mresp='0' respOnPhys='1' respOnFunc='0' req='0'>
                        <NAME>
                            <TUV xml:lang='en-US'>Stop</TUV>
                            <TUV xml:lang='de-DE'>Beenden</TUV>
                        </NAME>
                        <QUAL>Stop</QUAL>
                    </SERVICE>
                    <SIMPLECOMPCONT shproxyref='_0x01dbee18'>
                        <SPECDATAOBJ id='_0x01dda908' spec='rc'>
                            <NAME>
                                <TUV xml:lang='en-US'>Negative response codes</TUV>
                                <TUV xml:lang='de-DE'>Negative response codes</TUV>
                            </NAME>
                            <QUAL>NRC</QUAL>
                            <TEXTTBL id='_0x01237e70' bm='4294967295'>
                                <NAME>
                                    <TUV xml:lang='en-US'>LocalTable</TUV>
                                    <TUV xml:lang='de-DE'>LocalTable</TUV>
                                </NAME>
                                <QUAL>LocalTable</QUAL>
                                <CVALUETYPE bl='8' bo='21' enc='uns' sig='0' df='hex' qty='atom' sz='no' minsz='0' maxsz='255'/>
                                <PVALUETYPE bl='8' bo='21' enc='asc' sig='0' df='text' qty='field' sz='no' minsz='0' maxsz='255'/>
                                <TEXTMAP s='16' e='16'>
                                    <TEXT>
                                        <TUV xml:lang='en-US'>General reject</TUV>
                                        <TUV xml:lang='de-DE'>Allgemeine Verweigerung</TUV>
                                    </TEXT>
                                </TEXTMAP>
                                <TEXTMAP s='18' e='18'>
                                    <TEXT>
                                        <TUV xml:lang='en-US'>Subfunction not supported - invalid format</TUV>
                                        <TUV xml:lang='de-DE'>Unterfunktion nicht unterstützt oder ungültiges Format</TUV>
                                    </TEXT>
                                </TEXTMAP>
                                <TEXTMAP s='120' e='120'>
                                    <TEXT>
                                        <TUV xml:lang='en-US'>Request correctly received - response pending</TUV>
                                        <TUV xml:lang='de-DE'>Anforderung erhalten - Antwort steht aus</TUV>
                                    </TEXT>
                                </TEXTMAP>
                                <TEXTMAP s='128' e='128'>
                                    <TEXT>
                                        <TUV xml:lang='en-US'>Service not supported in active diagnostic mode</TUV>
                                        <TUV xml:lang='de-DE'>Service nicht unterstützt in aktiver Session</TUV>
                                    </TEXT>
                                </TEXTMAP>
                            </TEXTTBL>
                        </SPECDATAOBJ>
                    </SIMPLECOMPCONT>
                </DIAGINST>
            </VAR>
        </ECU>
    </ECUDOC>
</CANDELA>

解决方案

If you were using DOM parsing on the same size data in ActionScript, then you can use DOM parsing in Java; however, I do not recommend using the standard w3c API which is old and clumsy. A modern DOM library such as jdom2 will offer a lot more flexibility, such as retrieving child nodes by name. Here is an example using jdom2. All the getChild() calls could of course be replaced by an XPath.

Document doc = new SAXBuilder().build(new File("CANDELA.xml"));
List<Element> list = doc.getRootElement()
        .getChild("ECUDOC")
        .getChild("ECU")
        .getChild("VAR")
        .getChild("DIAGCLASS")
        .getChildren("DIAGINST");
System.out.println(list.size() + " DIAGINST nodes");

for (Element node : list) {
    System.out.println(node.getAttribute("id").getValue()
            + " = " + node.getChildText("QUAL"));
}

这篇关于解析Java中的一个大的XML节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆