以XML文件格式的内容保存:
String ext = metaFileName.substring(metaFileName.lastIndexOf("."));
logger.debug("文件后缀名:" + ext);
if(!".xml".equalsIgnoreCase(ext)) {
addActionError("文件类型错误,只能是XML格式的文件。");
} else {
logger.debug("元数据文件:{}", meta.getAbsolutePath());
logger.debug("元数据文件存在:{}", meta.exists());
SAXReader sax = new SAXReader();
Document doc;
try {
doc = sax.read(meta);
getModel().setFileContent(doc.asXML());
super.save();
} catch (DocumentException e) {
e.printStackTrace();
}
}
开始读取XML文件的时候用的是流的方式,影响文件编码格式(以后做事要多动脑子,多试。。。。)
读取XML后,根据xml标签说明对应文件,解析XML成文本内容。
public String queryMetadataInfo() {
Metadata mdata = getManager().getMatadataInfo(getModel().getType());
if (mdata != null) {
XMLWriter outFile = null;
try {
logger.debug("元数据文件内容:{}", mdata.getFileContent());
Document outerdoc = DocumentHelper.parseText(mdata.getFileContent());
String folderPath = getServletContext().getRealPath("/metafile/");
File folder = new File(folderPath);
if (!folder.exists()) {
folder.mkdirs();
}
outFile = new XMLWriter(new FileOutputStream(folderPath + File.separator + mdata.getMetaSet()+ ".xml"));
outFile.write(outerdoc);
Document doc = readDoc(folderPath + File.separator + mdata.getMetaSet()+ ".xml");
Element root = doc.getRootElement();
//读取元数据文件对应的节点信息
Map infoMap = getMetaFileInfo(folderPath + File.separator + "config.xml");
//遍历元数据文件所有的子节点
viewAllElement(root);
String mContent = mdata.getFileContent();
for (Node node : metaList) {
if (StringUtils.isBlank(node.getText())) {
mContent = mContent.replace("</"+node.getName()+">", "<br/>").replace("<"+node.getName()+">",
"<b>" + infoMap.get(node.getName()).toString() + "<br/>" + "</b>").replace(" ", " ");
} else {
mContent = mContent.replace("</"+node.getName()+">", "<br/>").replace("<"+node.getName()+">",
"<b>" + infoMap.get(node.getName()).toString() + ": " + "</b>").replace(" ", " ");
}
}
getResponse().setCharacterEncoding("UTF-8");
getResponse().setContentType("text/html");
render(getResponse(), "<font size='2'>"+mContent+"</font>", "text/html");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (outFile != null) {
outFile.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
render(getResponse(), "暂无数据", "text/html");
}
return null;
}
/**
* 读取元数据文件对应的节点信息
* @param filePath 文件
*/
@SuppressWarnings("unchecked")
private Map getMetaFileInfo(String filePath) {
Document document = readDoc(filePath);
List nodeList = document.selectNodes("//item");
Iterator iter = nodeList.iterator();
Map fileInfoMap = new HashMap();
while(iter.hasNext()){
Element element=(Element)iter.next();
Iterator itemNameIter=element.elementIterator("itemName");
Iterator aliasIter=element.elementIterator("itemAlias1");
Element itemNameElement = null;
Element aliasElement = null;
while(itemNameIter.hasNext()){
itemNameElement=(Element)itemNameIter.next();
}
while(aliasIter.hasNext()){
aliasElement=(Element)aliasIter.next();
}
//logger.info(itemNameElement.getText() + " : " + aliasElement.getText());
fileInfoMap.put(itemNameElement.getText(), aliasElement.getText());
}
return fileInfoMap;
}
/**
* 取得document对象
* @param filename 文件名
*/
private Document readDoc(String filename) {
SAXReader reader = new SAXReader();
try {
return reader.read(new FileInputStream(new File(filename)));
} catch (DocumentException e) {
e.printStackTrace();
throw new ApplicationException(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
throw new ApplicationException(e.getMessage());
}
}
/**
* 遍历所有节点
* @param element
*/
@SuppressWarnings("unchecked")
public void viewAllElement(Element element) {
for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
Node node = element.node(i);
if ( node instanceof Element ) {
viewAllElement( (Element) node );
//logger.info("节点名称:" + node.getName() + " 节点内容:" + node.getText());
metaList.add(node);
}
}
}
多想,多试,使用多种方法实现。。。
分享到:
相关推荐
Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc
dom4j解析xml文件代码示例 dom4j解析xml文件代码示例 dom4j解析xml文件代码示例
dom4j解析xml文件的压缩包,完整版。对jdom进行了封装。包含源码,jar包以及所需的全部内容。
dom4j解析XML文件格式dom4j解析XML文件格式dom4j解析XML文件格式
dom4j解析XML文档.ppt
完整的讲解一个dom4j对xml的增删改查
一个关于用dom4j解析xml,遍历xml,建立xml的简单例子
Java使用sax、dom、dom4j解析xml文档的代码,包含dom4j的jar包。
分别使用DOM和DOM4j解析XML文件,因为目前使用最广泛的是DOM4j所以只写了用DOM4j对XML进行增删改查。
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
dom4j是一种解析XML文档的开放源代码XML框架。本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器...
自己写的一个dom4j解析xml文件工具类
本人自己研究的解析方法,主要用dom4j解析XML文件,进而获取里面的信息
dom4j解析xml,利用反射机制.将解析出来的信息保存到一个类当中
在本文中,我们将学习如何使用 Dom4j 生成 XML 文档和解析 XML 文档。 生成 XML 文档 使用 Dom4j 生成 XML 文档非常简单。首先,我们需要创建一个 Document 对象,然后添加元素和属性。下面是一个生成 XML 文档的...
很详细的文档 可以借鉴下 希望对你有帮助
Dom4j解析Xml文件源码 源码描述: 一、源码介绍 通过dom4j解析自定义xml文件 二、主要功能 自定义xml文件,自定义实体,通过dom4j解析出该xml的demo 三、注意事项 开发环境为jdk1.8,无数据库
dom4j 解析xml文件小例子 dom4j 解析xml文件小例子
java dom4j 解析xml文档 使用java操作xml 例如创建 读取 删除 等等
dom4j解析xml,连接oracle数据库实例