1

我是 xml 解析的新手,我们是否可以更新或修改,例如在运行时使用 SAX 解析器删除 XML 的节点,并将更新的数据作为 XML 流式传输,或者如果我们需要将其转换为我们自己的格式?正如 DOM 解析器所做的那样。

dbFactory = DocumentBuilderFactory.newInstance();
            docBuilder = dbFactory.newDocumentBuilder();
            document = docBuilder.parse("src/"+xmlFile);

             tranformerFactory = TransformerFactory.newInstance();
             transformer = tranformerFactory.newTransformer();

             for (int i = 0; i < inputElementsArrayToRemove.length; i++) 
             {
                 element = (Element)document.getElementsByTagName(inputElementsArrayToRemove[i]).item(0);

                 if(element != null)
                 {
                    // Removes the node from the document
                     element.getParentNode().removeChild(element);
                 }
             }

             // Normalize the DOM tree to combine all adjacent nodes
            document.normalize();

            // Here, transforming(Converting) the document source to the another XML file
            Source source = new DOMSource(document);
            Result dest = new StreamResult(new FileOutputStream(new File("src/"+resultXmlFileName)));

            // transform method to write out the DOM as XML data.
            transformer.transform(source, dest);
4

4 回答 4

1

是的,使用XMLReaderXMLFilter API。有关示例,请参阅此问题答案。

于 2012-05-23T09:15:21.863 回答
0

我们可以使用 SAX 解析器读取或写入 xml。要编辑或更新,我们只需要使用 DOM 解析器。

于 2012-05-23T08:52:10.200 回答
0

你不能。SAX Parser 生成事件流并将它们提供给您的处理程序。处理程序用它做它喜欢的事情。

DOM 解析器生成节点树,您可以对其进行修改并将其保存为 XML(但它也会消耗内存)

XPP 解析器允许您将 xml 事件一一从流中提取出来,您可以使用解析器将其包装并动态修改事件。我推测是接近你的任务

于 2012-05-23T08:55:30.157 回答
0

没有。SAX 是基于事件的解析器,它告诉它何时遇到令牌。它用于阅读。我们可以用它来写吗?

于 2012-05-23T08:56:46.237 回答