2013-11-27 4 views
0

может кто-нибудь сказать мне, пожалуйста, как я могу установить значение атрибута в sax-элементе, чтобы он выглядел так, что id масштабируется: <document> <el id="1"><text>Motivationsschreiben.</text></el> <el id="2"><text>Sehr geehrte Damen und Herren.</text></el></document>.атрибут атрибута элемента SAX

Я стараюсь это так:

public class Element1 { 

Element e = null; 
BufferedReader in; 
StreamResult out; 

TransformerHandler th; 
AttributesImpl atts; 

public static void main(String[] args) { 

    new Element1().doit(); 
} 

public void doit() { 
    try { 
     in = new BufferedReader(new FileReader("D:\\Probe.txt")); 
     out = new StreamResult("D:\\data.xml"); 
     initXML(); 
     String str; 
     while ((str = in.readLine()) != null) { 
      process(str); 
     } 
     in.close(); 
     closeXML(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void initXML() throws ParserConfigurationException, 
     TransformerConfigurationException, SAXException { 
    // JAXP + SAX 
    SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory 
      .newInstance(); 

    th = tf.newTransformerHandler(); 
    Transformer serializer = th.getTransformer(); 
    serializer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); 
    // pretty XML output 
    serializer.setOutputProperty(
      "{http://xml.apache.org/xslt}indent-amount", "4"); 
    serializer.setOutputProperty(OutputKeys.INDENT, "yes"); 
    th.setResult(out); 
    th.startDocument(); 
    atts = new AttributesImpl(); 

    th.startElement("", "", "document", atts); 
} 

public void process(String s) throws SAXException { 

    try { 

     String[] elements = s.split("\\|"); 
     atts.clear(); 
     int i = 0; 
     i++; 

     atts.addAttribute("", "", "Id", "", "" + i); 

     th.startElement("", "", "el", atts); 
     th.startElement("", "", "text", atts); 
     th.characters(elements[0].toCharArray(), 0, elements[0].length()); 
     th.endElement("", "", "text"); 
     th.endElement("", "", "el"); 

    } 

    catch (Exception e) { 
     System.out.print("Out of bounds! DOH! should have used vectors"); 
    } 
} 

public void closeXML() throws SAXException { 
    th.endElement("", "", "document"); 
    th.endDocument(); 
} 

}

и в результате я стал таким: <?xml version="1.0" encoding="ISO-8859-1"?><document> <el Id="1"> <text Id="1">Motivationsschreiben</text> </el> <el Id="1"> <text Id="1">Sehr geehrte Damen und Herren</text> </el> <el Id="1"> <text Id="1">Mein Name </text> </el>

, но я хочу, чтобы идентификатор идет вверх, как это: <?xml version="1.0" encoding="ISO-8859-1"?><document> <el Id="1"> <text Id="1">Motivationsschreiben</text> </el> <el Id="2"> <text Id="2">Sehr geehrte Damen und Herren</text> </el> <el Id="3"> <text Id="3">Mein Name </text> </el>

Входной файл только простой текстовый файл

Motiva referschreiben Sehr geehrte Damen und Herren Mein Имя

Не могли бы вы дать мне несколько советов, что здесь не так?

Большое спасибо

ответ

1

Вы переменная i, которая используется для генерации значения идентификатора определяется в методе. Затем он будет воссоздаваться каждый раз, когда вызывается метод. Определите его как переменную класса:

class Element1 { 
... 
int i = 0; 
... 
public void process(String s) throws SAXException { 

    try { 

     String[] elements = s.split("\\|"); 
     atts.clear(); 
     i++; 

     atts.addAttribute("", "", "Id", "", "" + i); 

     th.startElement("", "", "el", atts); 
     th.startElement("", "", "text", atts); 
     th.characters(elements[0].toCharArray(), 0, elements[0].length()); 
     th.endElement("", "", "text"); 
     th.endElement("", "", "el"); 

    } 

    catch (Exception e) { 
     System.out.print("Out of bounds! DOH! should have used vectors"); 
    } 
}} 
+0

большое спасибо :), он работает – user2994149

Смежные вопросы