关于Eclipse 报 org.w3c.dom.Node (getTextContent())错误

关于调用 org.w3c.dom.Node 中的 Node.getTextContent()报错

由于新装了jdk、jre 导致报了以上问题:


解决方法:
1:如图找到Eclipse 中的 Java build puth
这里写图片描述

2:找到 JRE System Library 将其移动到 Web App Libraries 上方, 这样编辑器首先会使用JRE 中的类.
这里写图片描述

3:重新编译项目, 此问题解决~

<think>我们正在讨论的是org.w3c.dom.Document,它是W3CDOMAPI的一部分,用于表示和操作XML文档。根据用户提供的引用,特别是引用[2]和引用[3]中提到了org.w3c.dom.Document的使用。我们需要详细解释这个接口的用法和功能。注意:用户已经明确要求“org.w3c.dom.DocumentJava对象详解”,所以我们聚焦于此。结构安排:1.概述:什么是Document接口,它在DOM树中的地位。2.如何获取Document对象(解析XML文件或创建新的XML文档)。3.Document的核心方法及功能。4.遍历和操作XML文档的示例(结合用户提供的引用中的例子)。5.注意事项(如内存管理、命名空间处理等)。6.生成相关问题。注意引用标记:我们引用了用户提供的引用[2]和引用[3],在适当的地方标注[^2]和[^3]。另外,引用[4]是关于org.w3c.dom的中文API,可以作为一个参考资源。由于用户要求详细,我们将分步骤讲解。</think>### org.w3c.dom.Document 对象详解 `org.w3c.dom.Document` 是 W3C DOM 规范的核心接口,用于表示内存中的整个 XML/HTML 文档树。它是 DOM 树的根节点,提供了访问和操作文档内容的方法。以下是详细解析: --- #### 一、核心功能与特性 1. **文档表示** 作为 XML/HTML 文档的内存表示,包含元素、属性、文本等节点组成的树状结构。 2. **节点操作** ```java // 创建新元素 Element newElement = doc.createElement("book"); // 创建文本节点 Text textNode = doc.createTextNode("Java编程"); // 添加子节点 newElement.appendChild(textNode); doc.getDocumentElement().appendChild(newElement); ``` 3. **文档导航** ```java // 获取根元素 Element root = doc.getDocumentElement(); // 按标签名查找节点 NodeList books = doc.getElementsByTagName("book"); // 遍历节点 for (int i=0; i<books.getLength(); i++) { Element book = (Element) books.item(i); System.out.println(book.getAttribute("title")); } ``` --- #### 二、关键方法详解 | 方法 | 作用 | 示例 | |------|------|------| | `getDocumentElement()` | 获取根元素 | `Element root = doc.getDocumentElement()` | | `createElement(String)` | 创建元素节点 | `Element el = doc.createElement("bean")` | | `createTextNode(String)` | 创建文本节点 | `Text text = doc.createTextNode("form")` | | `getElementsByTagName(String)` | 按标签名查询 | `NodeList nodes = doc.getElementsByTagName("property")` | | `importNode(Node, boolean)` | 导入外部节点 | `Node imported = doc.importNode(externalNode, true)` | | `getDocumentURI()` | 获取文档URI | `String uri = doc.getDocumentURI()` | --- #### 三、XML解析实战(结合引用示例) ```java // 引用[2]解析示例 @Test public void parseXML() throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("persons.xml"); // 解析XML文件 // 获取所有<姓名>节点 NodeList names = doc.getElementsByTagName("姓名"); System.out.println("第一个姓名:" + names.item(0).getTextContent()); System.out.println("第二个姓名:" + names.item(1).getTextContent()); } ``` ```java // 引用[1] DOM4J 对比(注意:DOM4J非标准DOM) public void parserXml(String fileName) { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(fileName)); // DOM4J的Document Element root = document.getRootElement(); // 获取根元素 // ...遍历操作 } ``` --- #### 四、XML生成与修改 ```java // 创建新文档 Document doc = DocumentBuilderFactory.newInstance() .newDocumentBuilder().newDocument(); // 添加根元素(引用[3]结构) Element root = doc.createElement("beans"); doc.appendChild(root); // 添加子元素 Element bean = doc.createElement("bean"); bean.setAttribute("name", "/unitPrice.do"); root.appendChild(bean); // 添加带文本的子元素 Element property = doc.createElement("property"); property.setAttribute("name", "commandName"); bean.appendChild(property); Element value = doc.createElement("value"); value.appendChild(doc.createTextNode("form")); // 文本内容 property.appendChild(value); ``` --- #### 五、高级特性 1. **命名空间处理** ```java // 启用命名空间感知 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); // 创建带命名空间的元素 Element el = doc.createElementNS("http://example.com", "ex:book"); ``` 2. **XPath支持** ```java XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xpath = xpathFactory.newXPath(); Node node = (Node) xpath.evaluate("//bean[@name]", doc, XPathConstants.NODE); ``` 3. **文档序列化** ```java TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); transformer.transform(new DOMSource(doc), new StreamResult(new File("output.xml"))); ``` --- #### 六、最佳实践与注意事项 1. **内存管理** - 大型XML文件使用`SAXParser`替代DOM避免内存溢出 - 及时释放无用的`Node`引用 2. **线程安全** - `Document`对象非线程安全,多线程环境需同步访问 3. **错误处理** ```java try { // 解析操作 } catch (ParserConfigurationException | SAXException | IOException e) { // 处理DOM解析三大异常 } ``` 4. **性能优化** - 批量修改时使用`DocumentFragment` - 避免深度嵌套的XPath查询 > 参考资源:[DOM Level 3 Core Specification](https://www.w3.org/TR/DOM-Level-3-Core/) [^4] --- #### 七、与其他技术的对比 | 特性 | org.w3c.dom | DOM4J | SAX | |------|-------------|-------|-----| | 标准性 | W3C标准 | 第三方库 | W3C标准 | | 内存占用 | 高 | 中等 | 低 | | 访问方式 | 随机访问 | 随机访问 | 流式访问 | | 修改能力 | 强 | 强 | 只读 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值