0

org.w3c.dom を使用して同じ XML に値を動的に設定する次のコードを持っている固定形式のない XML があります。

public String generateXML(String[] tags,String[] tagValues,String xmlfilePath){
        String strXML = "";

        try{

            if(tags == null || tagValues == null || xmlfilePath == null){


            }else{


                File file = new File(xmlfilePath);

                if (file.exists()){

                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder builder = factory.newDocumentBuilder();
                    org.w3c.dom.Document doc = builder.parse(file);

                    NodeList nodeList = doc.getElementsByTagName("*");

                    int k =0;
                    for (int i=0; i<nodeList.getLength(); i++) {

                        Node node = (Node)nodeList.item(i);

                        if(node.getNodeName().trim().equalsIgnoreCase(tags[k])){
                            node.setTextContent(tagValues[k]);
                            k++;
                        }
                    }

                    DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation();
                    LSSerializer lsSerializer = domImplementation.createLSSerializer();
                    strXML = lsSerializer.writeToString(doc);

                }else{

                }
            }

        }catch (Exception e) {
            e.printStackTrace();

        }


        return strXML;
    }

しかし、古いバージョンのJDKでは機能しないため、JDOMでも同じことをしたいと考えています。

どのように可能ですか?各例にはタグ名が必要ですが、共通のメソッドを作成したいです。

4

1 に答える 1

0

私が知る限り、これらの2つの方法は「同じこと」を行います。

'古い'JDK(Java5より前のものを想定)を使用したいので、JDOM1.xを使用しています。

import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.filter.ElementFilter;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSSerializer;
import org.xml.sax.SAXException;

public class DOMJDOM {

    /**
     * @param args
     * @throws ParserConfigurationException 
     * @throws IOException 
     * @throws SAXException 
     */
    public static String dom(File file, String[] tags, String[] tagValues) throws ParserConfigurationException, SAXException, IOException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        org.w3c.dom.Document doc = builder.parse(file);

        NodeList nodeList = doc.getElementsByTagName("*");

        int k =0;
        for (int i=0; i<nodeList.getLength(); i++) {

            Node node = (Node)nodeList.item(i);

            if(node.getNodeName().trim().equalsIgnoreCase(tags[k])){
                node.setTextContent(tagValues[k]);
                k++;
            }
        }

        DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation();
        LSSerializer lsSerializer = domImplementation.createLSSerializer();
        return lsSerializer.writeToString(doc);
    }

    /**
     * @param args
     * @throws IOException 
     * @throws JDOMException 
     */
    public static String jdom(File file, String[] tags, String[] tagValues) throws JDOMException, IOException {
        SAXBuilder saxfac = new SAXBuilder();
        Document doc = saxfac.build(file);

        Iterator<?> it = doc.getDescendants(new ElementFilter());
        int k =0;
        while (it.hasNext()) {

            Element emt = (Element)it.next();

            if(emt.getName().equalsIgnoreCase(tags[k])){
                emt.setText(tagValues[k]);
                k++;
            }
        }

        XMLOutputter xout = new XMLOutputter();
        return xout.outputString(doc);
    }
}
于 2012-06-11T12:27:58.467 に答える