1

以下は私のxmlです:

 <Body>
  <tag1 xmlns=""> <innerTag></innerTag> </tag1>
  </Body>

問題は、内部の文字列、つまり を取得できないこと<tag1></tag1>です <innerTag></innerTag>。以下は私の論理です:

public void startElement(final String uri, final String localName,
            final String qName, final Attributes attributes)
            throws SAXException {
        if ("tag1".equalsIgnoreCase(qName)){
            inTag1 = true;
            System.out.println("start");
        }
}


public void endElement(final String uri, final String localName,
            final String qName) throws SAXException {
        if ("tag1".equalsIgnoreCase(qName)) {
            System.out.println("end");
            inTag1 = false;
        }
}

public void characters(final char[] ch, final int start, final int length) {

        if (inTag1) {
            System.out.println("@@@" + new String(ch, start, length));
        }
    }
}

しかし、それは私に空の出力を与えています。誰でも助けることができます。

4

2 に答える 2

1

あなたが書いたUVMの回答へのコメントで

実は内部タグはこのxmlの中の一種のxmlです。だから全体的に欲しい

要素内のすべての XML を処理せずにコンテンツ全体を文字列として返すように SAX パーサーに指示する方法はありません。基本的に、次の 2 つのオプションがあります。

  • すべての SAX イベントをリッスンして XML 文字列を自分で構築することにより、XML 文字列を再構築する。
  • 解析しようとしている XML ドキュメントを管理している場合は、それらの形式を次のように変更します。

    <Body>
      <tag1 xmlns=""><![CDATA[ <innerTag></innerTag> ]]></tag1>
    </Body>
    
于 2012-09-23T10:21:56.500 に答える
0

"innerTag"あなたはの代わりにチェックする必要があります"tag1"

if ("innerTag".equalsIgnoreCase(qName)){
            inTag1 = true;
            System.out.println("start");
        }

基本的に、innerTagはtag1の子要素です。したがって、SAXパーサーは、有効なXML要素まで解析を続けます。

于 2012-09-23T10:06:27.203 に答える