Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何将XML元素添加到根标记?_Java_Xml - Fatal编程技术网

Java-如何将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文件:

<?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编程很重要。它不提供变压器包。有没有其他替代变压器的建议?