2015-11-15 28 views
0

一个XML文件,我有以下XML文件:编辑在java中

<Tables> 
    <table> 
     <row></row> 
    </table> 
<Tables> 

,我想将它编辑到:

<Tables> 
    <table> 
     <row>some value</row> 
    </table> 
<Tables> 

我使用文件作家写的XML文件。我如何编辑它?

我发现我创建的临时文件包含编辑,然后删除原始文件并重命名临时文件。有没有其他方法?

这是我的代码写入文件:

public boolean createTable(String path, String name, String[] properties) throws IOException { 
    FileWriter writer = new FileWriter(path); 
    writer.write("<Tables>"); 
    writer.write("\t<" + name + ">"); 
    for(int i=0; i<properties.length; i++){ 
     writer.write("\t\t<" + properties[0] + "></" + properties[0] + ">"); 
    } 
    writer.write("\t</" + name + ">"); 
    writer.write("</Tables>"); 
    writer.close(); 
    return false; 
} 
+1

我看不出有任何的Java这里。你是否试图使用Java写入XML文件?显示一些代码。 – Tdorno

+1

将Java代码添加到问题中。 –

+0

@Tdorno我把我的代码 –

回答

1

如果您的XML是静态的,你可以利用这一点,这里的input.xml是您的xml文件

File file = new File("input.xml"); 
byte[] data; 
try (FileInputStream fis = new FileInputStream(file)) { 
    data = new byte[(int) file.length()]; 
    fis.read(data); 
} 
String input = new String(data, "UTF-8"); 
String tag = "<row>"; 
String newXML = input.substring(0, input.indexOf(tag) + tag.length()) + "your value" + input.substring(input.indexOf(tag) + tag.length(), input.length()); 
try (FileWriter fw = new FileWriter(file)) { 
    fw.write(newXML); 
} 
System.out.println("XML Updated"); 
+0

,但我想编辑XML文件以后使用它 –

3

不要读写XML自己。 Java配套提供了多个API的为您解析和生成XML,这需要所有编码的关怀和逃避的问题:

  • DOM XML被加载到一个树形结构的记忆。
  • SAX XML作为一系列事件处理。这是一个推式解析器,解析器为每个事件调用您的代码。
  • StAX将XML读作一系列事件/令牌。这是一个拉分析器,您的代码将调用解析器来获取下一个值。

您还可以找到许多用于解析XML的第三方库,而Java本身也支持将XML编组到XML POJO。

就你而言,我建议DOM,因为它最容易使用。不要将DOM用于巨大的XML文件,因为它会将整个文件加载到内存中。对于大文件,我建议使用StAX。

除了编码问题之外,使用XML解析器将使得代码不易受到输入中的微小变化的影响,例如,下面的3个空的row元素意味着相同。抑或是row元素甚至是空的,以及如何摆脱现有的内容就像所示:

<!-- row is empty --> 
<row></row> 
<row/> 
<row /> 

<!-- row has content --> 
<row>5 + 7 &lt; 10</row> 
<row><![CDATA[5 + 7 < 10]]></row> 
<row><condition expr="5 + 7 &lt; 10"></row> 

使用DOM:

// Load XML from file 
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder domBuilder = domFactory.newDocumentBuilder(); 
Document document = domBuilder.parse(file); 

// Modify DOM tree (simple version) 
NodeList rowNodes = document.getElementsByTagName("row"); 
for (int i = 0; i < rowNodes.getLength(); i++) { 
    Node rowNode = rowNodes.item(i); 

    // Remove existing content (if any) 
    while (rowNode.getFirstChild() != null) 
     rowNode.removeChild(rowNode.getFirstChild()); 

    // Add text content 
    rowNode.appendChild(document.createTextNode("some value")); 
} 

// Save XML to file 
TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
transformer.transform(new DOMSource(document), 
         new StreamResult(file)); 
+0

谢谢你的澄清 –