由于我是java新手,我需要一些使用java修改xml文件的帮助。我在文件夹中有一些xml文件。我想添加一个子标签与另一个子标签。我试图通过使用文件获取所有文件。为了解析和修改目的,我正在使用DocumentBuildFactory和Element。但是在DocumentBuilder的parse方法中,文件不会显示为null。
输入: -
<Student>
<personal-details>
<name>abc</name>
<age>21</age>
</personal-details>
<address>
<zip>560037</zip>
</address>
</Student>
我想在地址标记中添加一个子元素,并期望输出如下: -
输出: -
<Student>
<personal-details>
<name>abc</name>
<age>21</age>
</personal-details>
<address>
<place>
<line1>some lane</line1>
</place>
<zip>560037</zip>
</address>
</Student>
我写的java代码在
下面import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class AddTag {
public static void main(String[] args) {
File folder = new File("C:\\Users\\Desktop\\xmlfiles\\");
File listOfFiles [] =folder.listFiles();
String fileName = null;
for(int i=0;i<listOfFiles.length;i++)
{
fileName = listOfFiles[i].getName();
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(folder+"\\"+fileName);
System.out.println(doc); // op:-[#document: null]
Node address = doc.getElementsByTagName("address").item(0);
Element place = doc.createElement("place");
place.appendChild(doc.createElement("line1").appendChild(doc.createTextNode("some lane")));
address.appendChild(place);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(folder+"\\"+fileName));
transformer.transform(source, result);
System.out.println("Done");
}catch(Exception e){
}
}
}
}
但是如果没有 line1 标记,我会在下面输出: -
<Student>
<personal-details>
<name>abc</name>
<age>21</age>
</personal-details>
<address>
<zip>560037</zip>
<place>some lane</place>
</address>
</Student>
答案 0 :(得分:1)
这一行:
Set html = IE.document
追加&#34;某些车道&#34;文本节点到Place节点。 appendChild返回根据文档添加的节点:
http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#appendChild(org.w3c.dom.Node) 返回:添加的节点。
因此将其分开并应该有效。 尝试这样的事情:
place.appendChild(doc.createElement("line1").appendChild(doc.createTextNode("some lane")));