jive中的类XMLProperties.java虽然非常有用,但它不支持属性,象下面的sample.xml文件。如何将“磁盘D”的容量改为30G?还用一般的递归遍历?听说JDOM发布的最新版已经加入了对XPATH的支持,赶紧下载,测试!
<?xml version="1.0" encoding="UTF-8"?>
<HD>
<disk name="C">
<capacity>8G</capacity>
<directories>200</directories>
<files>1580</files>
</disk>
<disk name="D">
<capacity>10G</capacity>
<directories>500</directories>
<files>3000</files>
</disk>
</HD>
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import org.jdom.xpath.*;
public class XPathTest {
public static void main(String[] args) throws IOException, JDOMException {
if (args.length != 1) {
System.err.println("Usage: java XPathTest sample.xml");
return;
}
String filename = args[0];
PrintStream out = System.out;
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File(filename));
XPath capacityXPath = XPath.newInstance("/HD/disk[@name='D']/capacity");
Object capacity = capacityXPath.selectSingleNode(doc);
Element ca = (Element)capacity;
ca.setText("30G");
XMLOutputter outputter = new XMLOutputter(" ",false);
outputter.setEncoding("gb2312");
outputter.output(doc, out);
}
}
下面是程序的运行结果,真爽!
C:/java>java XPathTest sample.xml
<?xml version="1.0" encoding="gb2312"?>
<HD>
<disk name="C">
<capacity>8G</capacity>
<directories>200</directories>
<files>1580</files>
</disk>
<disk name="D">
<capacity>30G</capacity>
<directories>500</directories>
<files>3000</files>
</disk>
</HD>
<?xml version="1.0" encoding="UTF-8"?>
<HD>
<disk name="C">
<capacity>8G</capacity>
<directories>200</directories>
<files>1580</files>
</disk>
<disk name="D">
<capacity>10G</capacity>
<directories>500</directories>
<files>3000</files>
</disk>
</HD>
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import org.jdom.xpath.*;
public class XPathTest {
public static void main(String[] args) throws IOException, JDOMException {
if (args.length != 1) {
System.err.println("Usage: java XPathTest sample.xml");
return;
}
String filename = args[0];
PrintStream out = System.out;
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File(filename));
XPath capacityXPath = XPath.newInstance("/HD/disk[@name='D']/capacity");
Object capacity = capacityXPath.selectSingleNode(doc);
Element ca = (Element)capacity;
ca.setText("30G");
XMLOutputter outputter = new XMLOutputter(" ",false);
outputter.setEncoding("gb2312");
outputter.output(doc, out);
}
}
下面是程序的运行结果,真爽!
C:/java>java XPathTest sample.xml
<?xml version="1.0" encoding="gb2312"?>
<HD>
<disk name="C">
<capacity>8G</capacity>
<directories>200</directories>
<files>1580</files>
</disk>
<disk name="D">
<capacity>30G</capacity>
<directories>500</directories>
<files>3000</files>
</disk>
</HD>