Java为XML节点赋值

Java为XML节点赋值,java,xml,dom,Java,Xml,Dom,我试图给一个空的XML节点赋值,但它似乎不起作用。我的XML结构如下所示: <createCustomer> <customerAttributes> <firstName></firstName> <lastName></lastName> </customerAttributes> </createCustomer> 我试图在以下代码中指定名字

我试图给一个空的XML节点赋值,但它似乎不起作用。我的XML结构如下所示:

<createCustomer>
    <customerAttributes>
        <firstName></firstName>
        <lastName></lastName>
    </customerAttributes>
</createCustomer>

我试图在以下代码中指定名字和姓氏:

private void createXML(Document skeleton, Map params) {
skeleton.getDocumentElement().normalize();

NodeList customerNodes = skeleton.getElementsByTagName("customerAttributes");

            for(int i=0; i<customerNodes.getLength(); i++) {
                NodeList children = customerNodes.item(i).getChildNodes();
                    for(int j=0; j<children.getLength(); j++) {
                        String childNode = children.item(j).getNodeName();
                            if(childNode.equalsIgnoreCase("firstName")){
                                children.item(j).setNodeValue(String.valueOf(params.get("fname")));
                                System.out.println(children.item(j));
                            }
                            else if (childNode.equalsIgnoreCase("lastName")){
                                children.item(j).setNodeValue(String.valueOf(params.get("sname")));
                                System.out.println(children.item(j));
                            }
                    }  
             }

     }
}
private void createXML(文档骨架、映射参数){
skeleton.getDocumentElement().normalize();
NodeList customerNodes=skeleton.getElementsByTagName(“customerAttributes”);

对于(int i=0;i您可以使用
setTextContent(String)

NodeList customerNodes=skeleton.getElementsByTagName(“customerAttributes”);
对于(int i=0;i
编辑:

它是有效的,下面是一个完整的示例,显示了结果

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
import org.xml.sax.InputSource;

public class Foo {
    public static void main(String[] args) throws Exception {
        // --------- LOAD XML
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = db.parse(new InputSource(new StringReader("<createCustomer>\r\n" + 
                "    <customerAttributes>\r\n" + 
                "        <firstName></firstName>\r\n" + 
                "        <lastName></lastName>\r\n" + 
                "    </customerAttributes>\r\n" + 
                "</createCustomer>")));

        // --------- PROCESS
        NodeList customerNodes = doc.getElementsByTagName("customerAttributes");

        for (int i = 0; i < customerNodes.getLength(); i++) {
            NodeList children = customerNodes.item(i).getChildNodes();
            for (int j = 0; j < children.getLength(); j++) {
                String childNode = children.item(j).getNodeName();
                if (childNode.equalsIgnoreCase("firstName")) {
                    children.item(j).setTextContent(String.valueOf("John"));
                }
                else if (childNode.equalsIgnoreCase("lastName")) {
                    children.item(j).setTextContent(String.valueOf("Doe"));
                }
            }  
        }

        // --------- OUTPUT
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        StringWriter writer = new StringWriter();
        transformer.transform(new DOMSource(doc), new StreamResult(writer));
        System.out.println(writer.getBuffer().toString());
    }
}
import java.io.*;
导入javax.xml.parsers.*;
导入javax.xml.transform.*;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.*;
导入org.xml.sax.InputSource;
公开课Foo{
公共静态void main(字符串[]args)引发异常{
//------加载XML
DocumentBuilder db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc=db.parse(新的InputSource(新的StringReader)(“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
"")));
//------过程
NodeList customerNodes=doc.getElementsByTagName(“customerAttributes”);
对于(int i=0;i
它不输出:

<createCustomer>
    <customerAttributes>
        <firstName>John</firstName>
        <lastName>Doe</lastName>
    </customerAttributes>
</createCustomer>

约翰
雌鹿

检查粘贴的代码段是否正确;外部循环似乎重复;此外,如果出现异常,粘贴异常也不正确useful@guido谢谢,我已将代码的格式设置为更易于阅读。代码没有给出它生成和运行的任何异常。很抱歉,我已经尝试了,但它也不起作用。将更新我的问题。谢谢r你的回答很有趣,但对我来说仍然不起作用!我正在将XML从一个文件读入一个文档对象,然后直接从那里解析XML。虽然我的打印语句是错误的,但这并不重要。Doh!我应该输入
System.out.print(children.item(j.getTextContent());
谢谢你的帮助
<createCustomer>
    <customerAttributes>
        <firstName>John</firstName>
        <lastName>Doe</lastName>
    </customerAttributes>
</createCustomer>