java - 如何在 Java 1.4 中添加 xml 元素

标签 java jdk1.4

我正在尝试添加“标题”元素,但收到 NO_MODIFICATION_ALLOWED_ERR 错误...

private static void saveDoc(String f) throws Exception {

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(f);

    // create DOMSource for source XML document
    DOMSource xmlSource = new DOMSource(doc);

    Node nextNode = xmlSource.getNode().getFirstChild();

    while (nextNode != null) {
        System.out.print("\n node name: " + nextNode.getNodeName() + "\n");
        if (nextNode.getNodeName().equals("map")) {
            nextNode.appendChild(doc.createElement("title")); 

上面的行抛出错误:

Exception in thread "main" org.w3c.dom.DOMException: NO_MODIFICATION_ALLOWED_ERR: An attempt is made to modify an object where modifications are not allowed. at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(Unknown Source) at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(Unknown Source) at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(Unknown Source) at myProject.Main.saveDoc(Main.java:171) at myProject.Main.main(Main.java:48)

            break;
        }

        nextNode = nextNode.getNextSibling();             
    }
}

我的 xml 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<?dctm xml_app="LOPackage"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "file:C:/Documents%20and%20Settings/joe/Desktop//LOPackage/map.dtd">
<map xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/" class="- map/map " ditaarch:DITAArchVersion="1.1" domains="(map mapgroup-d) (topic indexing-d)">
    <topicref class="- map/topicref " href="dctm://ai/0501869e80002504?DMS_OBJECT_SPEC=RELATION_ID" type="Le"/>
    <topicref class="- map/topicref " href="dctm://ai/0501869e80002505?DMS_OBJECT_SPEC=RELATION_ID" type="Pr"/>
    <topicref class="- map/topicref " href="dctm://ai/0501869e80002506?DMS_OBJECT_SPEC=RELATION_ID" type="Pr"/>
</map>

最佳答案

不确定是否是这个原因,但请检查您的 DOM 实现是否验证了对 DOM 的所有更改。因为在你的代码中,

nextNode.appendChild(doc.createTextNode("title"));

将尝试创建一个文本节点作为 map 元素的子元素,而 DITA Map 不允许这样做。相反,尝试

Element title = doc.createElement("title");
title.appendChild(doc.createTextNode("title content"))
nextNode.appendChild(title);

关于java - 如何在 Java 1.4 中添加 xml 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260122/

相关文章:

java - 从通用接口(interface)扩展

java - 构造函数需要一个无法找到的 bean 类型

java - 哪个 PDF 生成 API (Java) 支持古吉拉特语字体?

java - JDK 1.4 的简单网络服务示例

java - 字节缓冲区替代

Java:整数 obj 无法转换为 Comparable

java - 根据设计分辨率生成当前屏幕分辨率的正确坐标

java - 运行可执行 jar 文件时未找到类错误(使用 eclipse 导出的 RMI 应用程序)

java - JDeveloper ADF Mobile -- javax.crypto - 无法找到策略文件