2

XMLを読み取るためにjava stax XMLStreamReaderを使用しています。特定の内部ノードの文字列全体を取得したい。

XML:

<example>
   <ignoreMe>
      <bla></bla>
   </ignoreMe>
   <getMe>
      <data></data>
   </getMe>
</example>

内部 getMe ノード全体を文字列で取得できるようにしたいだけです。いいえ:

   <getMe>
      <data></data>
   </getMe>

これが私が持っているものです..しかし、私は立ち往生しています:

XMLStreamReader parser = factory.createXMLStreamReader(new FileReader(file)); 
for (int event = parser.next();  
event != XMLStreamConstants.END_DOCUMENT;
event = parser.next()) {

    switch (event) {
    case XMLStreamConstants.START_ELEMENT:
        if (parser.getLocalName().equals("GetMe")) {
             //??????????????????
4

2 に答える 2

3

先週 StaX の学習を開始しましたが、まだ問題の解決策を探している場合は、次の情報が役立つかもしれません。

    XMLInputFactory xmlif = XMLInputFactory.newInstance();
    xmlif.setProperty(XMLInputFactory.IS_COALESCING, true);
    XMLStreamReader xmlsr;
    String resultat="";
    boolean isGetme=false;

    try {
        xmlsr = xmlif.createXMLStreamReader(new FileReader("lib/toto.xml"));
        int eventType;
        while (xmlsr.hasNext()) {
            eventType = xmlsr.next();
            switch (eventType) {
                case XMLStreamConstants.START_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        isGetme=true;
                    }
                    if(isGetme){
                        resultat+="<"+xmlsr.getLocalName()+">";
                    }
                    break;
                case XMLStreamConstants.CHARACTERS:
                    if(isGetme){
                        resultat+=xmlsr.getText();
                    }
                    break;
                case XMLStreamConstants.END_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                        isGetme=false;
                    }
                    if(isGetme && !xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                    }
                    break;
                default:
                    break;
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (XMLStreamException e) {
        e.printStackTrace();
    }
    System.out.println(resultat);

このコードは、すべての内部ノードとテキスト コンテンツを取得し、文字列に格納します。いいえ:

<getMe>
      <data>test</data>
</getMe>

ただし、このコードは非常に「醜い」ものであり、探しているものに対する最適なソリューションではないことは確かです。JDOM の方がニーズに適している可能性があります。

于 2011-04-04T07:56:11.750 に答える
1

これを確認してください

メソッドparser.getElementText()を確認してください

HTH

これにより、内部テキストが取得されます。通常の方法で開始名と終了名を手動で追加できます。また、XMLは厳格な標準であるため、問題ありません。

于 2010-11-10T21:29:46.117 に答える