Java Sax XML Parser, парсинг пользовательских «значений» в тегах XML? - PullRequest
3 голосов
/ 22 февраля 2011

Раньше я мало работал с XML, поэтому, возможно, мое незнание правильной терминологии вредит мне в поисках того, как это сделать. У меня есть фрагмент кода ниже, который я использую для анализа XML-файла, как показано ниже. Проблема в том, что он выбирает только значения XML в пределах <Tag>Value</Tag>, но не для приведенного ниже, где мне нужно получить значение TagValue, которое в этом случае будет "Russell Diamond".

Буду признателен, если кто-нибудь сможет предложить помощь в получении таких значений. Спасибо.

<Tag TagName="#Subject" TagDataType="Text" TagValue="Russell Diamond"/>

Фрагмент, который я использую:

public void printElementNames(String fileName) throws IOException {
    //test write to file
       FileWriter fstream = new FileWriter("/home/user/Desktop/readEDRMtest.txt");
        final BufferedWriter out = new BufferedWriter(fstream);


    //

    try {
        SAXParserFactory parserFact = SAXParserFactory.newInstance();
        SAXParser parser = parserFact.newSAXParser();
        System.out.println("XML Elements: ");
        DefaultHandler handler = new DefaultHandler() {
            public void startElement(String uri, String lName, String ele,
                    Attributes attributes) throws SAXException {
                // print elements of xml
                System.out.println(ele);
                try {
                    out.write(ele);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

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


                System.out.println("Value : "
                    + new String(ch, start, length));
                try {
                    out.write("Value : "
                            + new String(ch, start, length));
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

        };

Ответы [ 2 ]

3 голосов
/ 22 февраля 2011

Вы хотите посмотреть на извлечение атрибутов .Выполните поиск, и вы найдете свой ответ.

Метод startElement (...) класса DefaultHandler передает параметр с именем attribute, который ссылается на объект Attribute.API для интерфейса атрибутов опишет, как извлечь необходимую информацию из этого объекта.

Например:

out.write(attributes.getValue("TagValue"));
2 голосов
/ 22 февраля 2011

Это урезанная и рабочая версия вашего фрагмента кода:

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SAX 
{
    public static void main(String[] args) throws IOException {
        new SAX().printElementNames("Delete.xml");
    }

    public void printElementNames(String fileName) throws IOException 
    {

        try {
            SAXParserFactory parserFact = SAXParserFactory.newInstance();
            SAXParser parser = parserFact.newSAXParser();
            DefaultHandler handler = new DefaultHandler() 
            {
                public void startElement(String uri, String lName, String ele,  Attributes attributes) throws SAXException {
                    System.out.println(ele);
                    System.out.println(attributes.getValue("TagValue"));
                }

                public void characters(char ch[], int start, int length) throws SAXException {
                    System.out.println("Value : " + new String(ch, start, length));
                }               
            };

            parser.parse(new File(fileName), handler);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

Содержание Delete.xml

<Tag TagName="#Subject" TagDataType="Text" TagValue="Russell Diamond"/>

Дополнительная информация:

http://www.java -samples.com / showtutorial.php? Tutorialid = 152

...