Java-如何将XML元素添加到根标记?
我有一个如下所示的XML文件:Java-如何将XML元素添加到根标记?,java,xml,Java,Xml,我有一个如下所示的XML文件: <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <allinfo> <filepath>/mnt/sdcard/Audio_Recorder/</filepath> <filename>newxml35500.3gp</filename> <annotation> <file>newx
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<allinfo>
<filepath>/mnt/sdcard/Audio_Recorder/</filepath>
<filename>newxml35500.3gp</filename>
<annotation>
<file>newxml35500.3gp</file>
<timestamp>0:05</timestamp>
<note>uuuouou</note>
</annotation>
<filepath>/mnt/sdcard/Audio_Recorder/</filepath>
<filename>newxml35501.3gp</filename>
<annotation>
<file>newxml35501.3gp</file>
<timestamp>0:04</timestamp>
<note>tyty</note>
</annotation>
</allinfo>
/mnt/SD卡/录音机/
新xml35500.3gp
新xml35500.3gp
0:05
乌乌
/mnt/SD卡/录音机/
新xml35501.3gp
新xml35501.3gp
0:04
泰蒂
我正在尝试在创建XML后向其添加一个附加注释,以便该XML具有附加注释:
<annotation>
<file>blah</file>
<timestamp>0:00</timestamp>
<note>this is a note</note>
</annotation>
废话
0:00
这是一张便条
找到根并在Java中为XML编写几行代码的最佳方法是什么?我看到DocumentBuilderFactory从其他人那里得到了一些使用,但我不确定如何正确地实现它。任何帮助都将不胜感激。此功能:
final DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
final Document document = documentBuilder.parse(new ByteArrayInputStream("<foo><bar/></foo>".getBytes("UTF-8")));
final Element documentElement = document.getDocumentElement();
documentElement.appendChild(document.createElement("baz"));
final DocumentBuilder DocumentBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
最终文档Document=documentBuilder.parse(新的ByteArrayInputStream(“.getBytes”(“UTF-8”);
最终元素documentElement=document.getDocumentElement();
documentElement.appendChild(document.createElement(“baz”);
您将获得:
<foo><bar/><baz/></foo>
这项工作:
final DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
final Document document = documentBuilder.parse(new ByteArrayInputStream("<foo><bar/></foo>".getBytes("UTF-8")));
final Element documentElement = document.getDocumentElement();
documentElement.appendChild(document.createElement("baz"));
final DocumentBuilder DocumentBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
最终文档Document=documentBuilder.parse(新的ByteArrayInputStream(“.getBytes”(“UTF-8”);
最终元素documentElement=document.getDocumentElement();
documentElement.appendChild(document.createElement(“baz”);
您将获得:
<foo><bar/><baz/></foo>
将文件内容加载到字符串中,并使用正则表达式和字符串操作执行插入
String xml = "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>"
+ "<allinfo>"
+ "<filepath>/mnt/sdcard/Audio_Recorder/</filepath>"
+ "...";
// String xml = loadFromFile();
Pattern p = Pattern.compile("(.*?)(<allinfo>)(.*?)");
Matcher m = p.matcher(xml);
if (m.matches()) {
StringBuilder bld = new StringBuilder(m.group(1));
bld.append(m.group(2));
bld.append("<annotation>").append("\n");
bld.append("<file>blah</file>").append("\n");
bld.append("<timestamp>0:00</timestamp>").append("\n");
bld.append("<note>this is a note</note>").append("\n");
bld.append("</annotation>").append("\n");
bld.append("m.group(3));
xml = bld.toString();
}
String xml=“”
+ ""
+“/mnt/sdcard/Audio\u Recorder/”
+ "...";
//字符串xml=loadFromFile();
Pattern p=Pattern.compile((.*?)(.*?);
Matcher m=p.Matcher(xml);
如果(m.matches()){
StringBuilder bld=新StringBuilder(m.group(1));
bld.append(m.group(2));
bld.append(“”)append(“\n”);
bld.append(“blah”).append(“\n”);
bld.append(“0:00”)。append(“\n”);
bld.append(“这是一个注释”).append(“\n”);
bld.append(“”)append(“\n”);
bld.append(“m.group(3));
xml=bld.toString();
}
将文件内容加载到字符串中,并使用正则表达式和字符串操作执行插入
String xml = "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>"
+ "<allinfo>"
+ "<filepath>/mnt/sdcard/Audio_Recorder/</filepath>"
+ "...";
// String xml = loadFromFile();
Pattern p = Pattern.compile("(.*?)(<allinfo>)(.*?)");
Matcher m = p.matcher(xml);
if (m.matches()) {
StringBuilder bld = new StringBuilder(m.group(1));
bld.append(m.group(2));
bld.append("<annotation>").append("\n");
bld.append("<file>blah</file>").append("\n");
bld.append("<timestamp>0:00</timestamp>").append("\n");
bld.append("<note>this is a note</note>").append("\n");
bld.append("</annotation>").append("\n");
bld.append("m.group(3));
xml = bld.toString();
}
String xml=“”
+ ""
+“/mnt/sdcard/Audio\u Recorder/”
+ "...";
//字符串xml=loadFromFile();
Pattern p=Pattern.compile((.*?)(.*?);
Matcher m=p.Matcher(xml);
如果(m.matches()){
StringBuilder bld=新StringBuilder(m.group(1));
bld.append(m.group(2));
bld.append(“”)append(“\n”);
bld.append(“blah”).append(“\n”);
bld.append(“0:00”)。append(“\n”);
bld.append(“这是一个注释”).append(“\n”);
bld.append(“”)append(“\n”);
bld.append(“m.group(3));
xml=bld.toString();
}
我不建议在@dancran中添加属性:到目前为止,您尝试了什么?这里有很多例子……原始XML文件是使用XMLSerializer和OutputStream编写的,但我不知道如何使用它重新打开同一个XML,找到要写入的位置,然后在关闭与该文件的连接后写入更多信息。因此,为什么我要寻找另一种方法来打开与XML文件的连接并添加其他信息呢?我不建议在@dancran中添加一个属性:到目前为止您尝试了什么?这里有很多例子……原始XML文件是使用XMLSerializer和OutputStream编写的,但我不知道如何使用它重新打开同一个XML,找到要写入的位置,然后在关闭与该文件的连接后写入更多信息。因此,我为什么要寻找另一种方法来打开到XML文件的连接并添加其他信息呢。为了让它更有用,你能为DocumentBuilder提供到JavaDoc的链接吗?@paul mckenzie看起来不错,但我有一个问题。我不知道它如何知道如何写入保存的XML文件。我不需要在某个地方传递路径,以便它知道在哪里解析和输入吗?使用javax.xml.transform.Transformer将文档转换为字符串,然后将字符串写入文件。@paul mckenzie我想我使用Android编程很重要。它不提供变压器包。还有什么建议可以替代变压器吗?回答很有帮助。为了让它更有用,你能为DocumentBuilder提供到JavaDoc的链接吗?@paul mckenzie看起来不错,但我有一个问题。我不知道它如何知道如何写入保存的XML文件。我不需要在某个地方传递路径,以便它知道在哪里解析和输入吗?使用javax.xml.transform.Transformer将文档转换为字符串,然后将字符串写入文件。@paul mckenzie我想我使用Android编程很重要。它不提供变压器包。有没有其他替代变压器的建议?