2

Actionscript 3 の XML 解析アプローチに慣れてきたので、Java による解析方法はほとんど圧倒されません。E4X を使用すると、必要なノードに到達できる条件とともに、ドット表記とタグ名を使用できました。私はJavaでそのようなオプションを見つけることができませんでした.オンラインで多くの例をチェックして、それらのほとんどを解析するのに役立ちましたが、基本を超えていません.

私はDOMパーサーで正しい道を進んでいますか、それともXML用の他のパーサーを試す必要がありますか?

解析する必要がある非常に大きな XML ファイル (収まるように切り詰めました) があります。

XML ノード CANDELA -> ECUDOC -> ECU -> VAR -> DIAGCLASS -> DIAGINST で値を取得するにはどうすればよいですか? ActionscriptでXMLListとしてノードのセットを取得することは可能ですか?

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>
4

2 に答える 2

1

DOM パーサーはドキュメント全体をメモリ内に格納しますが、これは多くの場合、大きなファイルには適していません。非常に使いやすいので、ファイル全体をメモリに収めることができる場合は、それをお勧めします。

それ以外の場合、もう 1 つの優れたオプションは SAX です。 http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/は、それを使用する方法に関する優れたチュートリアルであり、ドキュメント全体をロードしませんメモリを使用しますが、コールバックを使用してさまざまなタグに応答できるようにします。

うまくいけば、これは有用な出発点です!

于 2013-11-11T06:10:15.593 に答える