java - 设置SAX元素的属性

标签 java xml sax

任何人都可以告诉我,我如何设置 sax 元素中的属性值,以便它看起来像 id 放大:<document> <el id="1"><text>Motivationsschreiben.</text></el> <el id="2"><text>Sehr geehrte Damen und Herren.</text></el></document> .

我尝试一下:

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>

但我希望 id 上升,如下所示:<?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>

输入文件只是简单的文本文件

动机史莱本 达门与海伦之声 我的名字

你能给我一些建议吗?这里出了什么问题?

非常感谢

最佳答案

用于生成 id 值的变量 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");
    }
}}

关于java - 设置SAX元素的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250529/

相关文章:

xml - 具有不同子句的多个元素的 Xquery

java - Android拉伸(stretch)布局宽度: absolute width + percentage

java - 如何在 Java 中获取 UTF-8Y 格式的字节

java - 如何在不使用bean的情况下将LinkedHashMap值输入数据库?

Java RMI服务器: method to be called on events

java - 当我尝试注销时应用程序崩溃

java - 以编程方式设置测试模式时出现真正的 Admob 广告

java - 在 SAX 解析期间确定根元素

java - 如何检索节点列表中的属性值

java - JJOE64 GraphView 库