0

次の形式の SAX 解析 (Java への) である XML ファイルを取得したと仮定します。

                <RootElement>
                  <text> blabla </text>
                  <rule1 name="a">1</rule1>
                  <rule2 name="b">2</rule2>
                </RootElement>

すべてのルールで name の属性を参照するにはどうすればよいですか? 私の目的は、たとえば「a」という名前のルールのみをtxtファイルに保存することです。ありがとうございました

4

2 に答える 2

0

SAX パーサーで XML を読み取る場合、一種の ContentHandler を実装します ( http://docs.oracle.com/javase/7/docs/api/org/xml/sax/ContentHandler.htmlを参照)。ContentHandler 内で、パーサーが「rule1」と「rule2」を入力すると、メソッド startElement が呼び出されます。startElement の 1 つのパラメーターは、基本的に属性名 (この例では「名前」) から対応する値へのマップである属性です。

一部のコード スニペットは次のようになります。

// Handle XML SAX parser events.
private ContentHandler contentHandler = new ContentHandler() {
    public void startDocument() throws SAXException {...}

    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
        cdata.setLength(0);
        if(atts == null) return;            
        // Write out attributes as new rows
        for(int i = 0; i < atts.getLength(); i++) {
            System.out.println(atts.getLocalName(i) + ": " + atts.getValue(i));
        }
    }


    public void characters(char[] ch, int start, int length) throws SAXException {...}

    public void endElement(String uri, String localName, String qName) throws SAXException {...}

    // All other events are ignored
    public void endDocument() throws SAXException {}
    public void endPrefixMapping(String prefix) throws SAXException {}
    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {}
    public void processingInstruction(String target, String data) throws SAXException {}
    public void setDocumentLocator(Locator locator) {}
    public void skippedEntity(String name) throws SAXException {}
    public void startPrefixMapping(String prefix, String uri) throws SAXException {}
};
于 2013-08-04T16:32:11.060 に答える
0

SAX を使用して XML を解析している場合は、実装のオーバーライドされたメソッド内で要素の属性値を確認できます ( DefaultHandlerを拡張することにより)。startElement()ContentHandler

public class MySAXHandler extends DefaultHandler {
    // ...
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // .. other elements ..
        // process <rule1,2 etc.
        if (localName.startsWith("rule")) {
            String value = attributes.getValue("name");
            if (value != null && value.equals("a")) {
                // save this rule
            }
        }
    }
}

参照:
SAX を使用した XML ファイルの解析

于 2013-08-04T16:33:28.597 に答える