如何使用java生成动态xml

如何使用java生成动态xml,java,xml,Java,Xml,我有一个固定的XML模板,节点可能会随着数据的增加而增加。 如果我有一个固定的模板。当提供父节点名称时,如何迭代所有子节点? 我可以基于xpath生成XML吗 我有以下代码:- Map map = hm(); Set set = map.entrySet(); // Get an iterator Iterator it = set.iterator(); // Display element

我有一个固定的XML模板,节点可能会随着数据的增加而增加。 如果我有一个固定的模板。当提供父节点名称时,如何迭代所有子节点? 我可以基于xpath生成XML吗

我有以下代码:-

Map map = hm(); 
            Set set = map.entrySet(); 
            // Get an iterator 
            Iterator it = set.iterator(); 
            // Display elements 
            while(it.hasNext()) { 
                Map.Entry me = (Map.Entry)it.next(); 
                if (check) {
                    xpath_String+= "|"+me.getKey(); 
                }else {
                    xpath_String+= me.getKey();
                    check = true;
                }           
            }

        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
            domFactory.setNamespaceAware(true); 
        DocumentBuilder builder = domFactory.newDocumentBuilder();
        //xml file name acts as template
        Document doc = builder.parse("template.xml"); 


        XPathFactory factory = XPathFactory.newInstance();
        XPath xpath = factory.newXPath(); 
        XPathExpression expr = xpath.compile(xpath_String);  
        Object result = expr.evaluate(doc, XPathConstants.NODESET); 
        NodeList nodes = (NodeList) result; 
        System.out.println("Total number of tokens: "+nodes.getLength());
        //for (int i = 0; i < nodes.getLength(); i++) {

        int i=0;

        StringTokenizer st = new StringTokenizer(xpath_String,"|");

        while (st.hasMoreElements()) {
            String val = (String) st.nextElement();
            if(hm().containsKey(val)){
                System.out.println("Node value is: "+nodes.item(i).getNodeName());
                nodes.item(i).setTextContent(hm().get(val).toString());
                i++;
            }
        }
        //}

        //write the content into xml file
         TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         DOMSource source = new DOMSource(doc);
         // generating the output file name
         StreamResult finalResult =  new StreamResult(new File("newfxml.xml"));
         transformer.transform(source, finalResult);

         //making a string for the dom
         StringWriter writer = new StringWriter();
         StreamResult stResult = new StreamResult(writer);
         transformer.transform(source, stResult);
Map Map=hm();
Set=map.entrySet();
//获取迭代器
Iterator it=set.Iterator();
//显示元素
而(it.hasNext()){
Map.Entry me=(Map.Entry)it.next();
如果(检查){
xpath_字符串+=“|”+me.getKey();
}否则{
xpath_String+=me.getKey();
检查=正确;
}           
}
DocumentBuilderFactory domFactory=DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder=domFactory.newDocumentBuilder();
//xml文件名充当模板
documentdoc=builder.parse(“template.xml”);
XPathFactory=XPathFactory.newInstance();
XPath=factory.newXPath();
XPathExpression expr=xpath.compile(xpath\u字符串);
Object result=expr.evaluate(doc,XPathConstants.NODESET);
节点列表节点=(节点列表)结果;
System.out.println(“令牌总数:+nodes.getLength());
//对于(int i=0;i
这里我有一个固定的模板和一张地图。从映射中,我得到xpath及其相应的值。只有在模板xml中的所有节点都不重复自身之前,这一点才有效。所以我想知道当我得到一个可重复的组件时,是否有任何方法可以迭代整个xml节点块。 有这样的解决办法吗?
或者我需要改变我打算继续的方式

如果要枚举节点的所有子节点,只需使用类似“Element parent=root.getChild(“parentNodeName”)”的内容获取父节点,然后可以使用相同的方法“List children=parent.getChildren(“childName”)枚举子节点

单据单据=null;
SAXBuilder sxb=新SAXBuilder();
试一试{
doc=sxb.build(新文件(MyXmlFilePath));
}捕获(JDOMException e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
元素根=doc.getRootElement();
List nodes=root.getChildren(“myNode”);
Iterator it=nodes.Iterator();
while(it.hasNext())
{
元素currentNode=it.next();
//这里的淋巴结治疗
}

Anhuin。

发布一个xml示例。那告诉我们你试过什么。那告诉我们你在哪里被卡住了。然后通过示例告诉我们您真正想要什么。您有XSD吗?如果是这样,您可以使用XMLBeans之类的东西。这是gud,但我的要求是按照提供的模板生成xml。在我得到节点的所有元素之前,这一直有效,但是即使我没有得到元素,我也需要用空值填充节点。此外,根据需要,完整的东西需要是通用的,因此我不能直接使用元素的标记名。
    Document doc = null;
    SAXBuilder sxb = new SAXBuilder();
    try {
        doc = sxb.build(new File(MyXmlFilePath));
    } catch (JDOMException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    Element root = doc.getRootElement();
    List<Element> nodes = root.getChildren("myNode");
    Iterator<Element> it = nodes.iterator();
    while(it.hasNext())
    {
        Element currentNode = it.next();
        // node treatment here
    }