DOM读XML文件

XML解析方法
本文介绍两种XML解析方法:一是通过字节流方式解析XML内容;二是直接读取文件并解析。这两种方法都使用了DocumentBuilderFactory来创建DocumentBuilder实例,并进一步解析XML获取所需节点。

方法1: 使用字节流的入口方式:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilderFactory.setValidating(false);
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
ByteArrayInputStream bis = new ByteArrayInputStream(content);
org.w3c.dom.Document document = docBuilder.parse(bis);
org.w3c.dom.NodeList rootNodes = document.getChildNodes();

org.w3c.dom.Node fieldDefineNode = rootNodes.item(0);
if (fieldDefineNode.getNodeName().equalsIgnoreCase(FIELD_DEFINITION))
{
org.w3c.dom.NodeList childNodes = fieldDefineNode.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++)
{
org.w3c.dom.Node childNode = childNodes.item(i);
String nodeName = childNode.getNodeName();
String nodeText = childNode.getTextContent();
if (nodeName.equalsIgnoreCase(RECORDS))
{
fieldDefine.setRecords(Long.parseLong(nodeText));
}
else if (nodeName.equalsIgnoreCase(TABLE_SIZE_IN_BYTES))
{
fieldDefine.setTableSizeInBytes(Long.parseLong(nodeText));
}
else if (nodeName.equalsIgnoreCase(COLUMN))
{
org.w3c.dom.Node nameNode = childNode.getAttributes().getNamedItem(NAME);
org.w3c.dom.Node typeNode = childNode.getAttributes().getNamedItem(TYPE);
String name = nameNode.getNodeValue();
int type = Integer.parseInt(typeNode.getNodeValue());
fieldDefine.getFields().put(name, new Column(name, type));
}
}
}

方法二:使用直接文件读取方式:

File file = new File(filepath);
FileInputStream fis = new FileInputStream(filepath);
int length = (int) file.length();
byte[] buffer = new byte[length];
fis.read(buffer, 0, length);
fis.close();

// XML DOM tree builder to build up for the whole XML tree detector
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilderFactory.setValidating(false);
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
ByteArrayInputStream bis = new ByteArrayInputStream(buffer);
org.w3c.dom.Document document = docBuilder.parse(bis);
org.w3c.dom.NodeList rootNodes = document.getChildNodes();
org.w3c.dom.Node configNode = rootNodes.item(0);
if (configNode.getNodeName().equalsIgnoreCase(CONFIGURATION))
{
org.w3c.dom.NodeList childNodes = configNode.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++)
{
org.w3c.dom.Node propertyNode = childNodes.item(i);
String propertyName = propertyNode.getNodeName();
String propertyValue = propertyNode.getTextContent();
if (propertyName.equalsIgnoreCase(PROPERTY))
{
// property getting operation for the whole operation
org.w3c.dom.Node nameNode = propertyNode.getAttributes().getNamedItem(NAME);
String nameValue = nameNode.getNodeValue();
if (nameValue.equalsIgnoreCase(INDEXPATH))
{
this.indexDir = propertyValue;
}
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值