Java编程:文件、数据库与XML处理全解析
立即解锁
发布时间: 2025-08-18 00:27:58 阅读量: 3 订阅数: 18 

# Java编程:文件、数据库与XML处理全解析
## 1. XML元素处理基础
在处理XML文件时,元素的文本内容并非直接存储在元素本身,而是存于作为元素子节点的Text节点中。对于大多数应用场景,可使用从Node接口继承的`getNodeValue`方法来获取文本节点存储的文本。
NodeList是由Node接口的`getChildNodes`方法或Element接口的`getElementsByTagName`方法返回的节点集合。它只有两个方法:`item(int i)`用于返回指定索引处的节点,`getLength()`用于返回列表中的项目数量,且第一个节点的索引为0。
以下是一个简单的统计`movies.xml`文件中所有Movie元素数量的代码示例:
```java
int count = 0;
Element root = doc.getDocumentElement();
Node movie = root.getFirstChild();
while (movie != null)
{
count++;
movie = movie.getNextSibling();
}
System.out.println("There are " + count + " movies.");
```
此方法先调用`getFirstChild`方法获取根元素的第一个子元素,再利用每个子元素的`getNextSibling`方法获取根元素的下一个子元素。
另外,还可以使用`getChildNodes`方法返回包含所有元素的NodeList对象,然后通过for循环逐个访问元素。示例代码如下:
```java
Element root = doc.getDocumentElement();
NodeList movies = root.getChildNodes();
for (int i = 0; i < movies.getLength(); i++)
{
Node movie = movies.item(i);
System.out.println(movie.getNodeName());
}
```
### 1.1 XML元素接口方法
| 方法 | 描述 |
| --- | --- |
| `String getAttribute(String name)` | 获取指定属性的值 |
| `NodeList getElementsByTagName(String name)` | 获取包含在该元素内且具有指定名称的所有元素节点的NodeList对象 |
| `boolean hasAttribute(String name)` | 判断元素是否具有指定属性 |
## 2. 获取XML元素属性值
要获取元素属性的值,可调用`getAttribute`方法并将属性名称作为参数传入,该方法会返回属性的字符串值。若有需要,可将此值转换为其他类型。需注意,属性值可能包含空格,可使用`trim`方法去除多余空格。
以下是一个获取`movies.xml`文件中每部电影的年份属性,并确定收藏中最古老电影年份的示例:
```java
Element root = doc.getDocumentElement();
Element movie = (Element)root.getFirstChild();
int oldest = 9999;
while (movie != null)
{
String s = movie.getAttribute("year");
int year = Integer.parseInt(s);
if (year < oldest)
oldest = year;
movie = (Element)movie.getNextSibling();
}
System.out.println("The oldest movie in the file "
+ "is from " + oldest + ".");
```
在这个方法中,由于`movie`变量需要为Element类型才能调用`getAttribute`方法,而`getNextSibling`方法返回的是Node类型,因此需要进行额外的类型转换。
## 3. 获取XML子元素值
元素的文本内容并非与元素存储在一起,而是存储在类型为Text的子节点中。例如,对于以下XML:
```xml
<Title>The Princess Bride</Title>
```
在XML文档中会产生两个节点:名为Title的Element节点和包含文本`The Princess Bride`的Text节点。
若要获取文本内容,需先获取Text元素,示例代码如下:
```java
Node textElement = titleElement.getFirstChild();
String title = textElement.getNodeValue();
```
也可使用更简洁的单语句写法:
```java
String title = titleElement.getFirstChild().getNodeValue();
```
若在程序中频繁进行此类操作,可编写一个辅助方法:
```java
private static String getTextValue(Node n)
{
return n.getFirstChild().getNodeValue();
}
```
然后通过调用该方法获取元素的文本内容:
```java
String title = getTextValue(titleElement);
```
获取文本内容后,若有需要可将其解析为数字类型。
## 4. 完整示例:列出电影信息
以下是一个完整的程序,用于读取`movies.xml`文件并在控制台列出每部电影的标题、年份和价格:
```java
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.w3c.dom.*;
import java.text.*;
public class ListMoviesXML
{
private static NumberFormat cf =
NumberFormat.getCurrencyInstance();
public static void ma
```
0
0
复制全文
相关推荐










