`
as1001001
  • 浏览: 91113 次
  • 性别: Icon_minigender_1
  • 来自: 鞍山
社区版块
存档分类
最新评论

java操作xml w3c及xml存储图片文件

阅读更多
//文件1

package com.kelsen.beans.imagehelper;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class ImageToXML {


/**
* 把图片转成 BASE64Encoder 
* @param str_FileName
* @return
*/
public static String readImage(String str_FileName) {
   BufferedInputStream bis = null;
   byte[] bytes = null;
   try {
    try {
     bis = new BufferedInputStream(new FileInputStream(str_FileName));
     bytes = new byte[bis.available()];
     bis.read(bytes);
    } finally {
     bis.close();
    }
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
   return new BASE64Encoder().encodeBuffer(bytes);
}

/**
* 把BASE64Decoder转成图片
* @param filename
* @param content
*/
public static void saveImage(String filename, String content) {
   try {
    DataOutputStream dos = null;
    try {
     byte[] bs = new BASE64Decoder().decodeBuffer(content);
     dos = new DataOutputStream(new BufferedOutputStream(
       new FileOutputStream(filename)));
     dos.write(bs);
    } finally {
     dos.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
}

}

//java文件2


/**
* @Title org.w3c.dom XML File Example
* @author Kelsen Xu
* @Date 2009.2.18
*/
package com.kelsen.beans.xmlhelper;

import java.io.File;
import java.util.Vector;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class KParseXML {

/********************************
* 指定文件名,获取Document对象
* @param str_FileName
* @return
********************************/
public static Document createDocument(String str_FileName){
   Document document_result=null;
   try {
    DocumentBuilderFactory documentBuilderFactory;
    DocumentBuilder documentBuilder;
    documentBuilderFactory=DocumentBuilderFactory.newInstance();
    documentBuilder=documentBuilderFactory.newDocumentBuilder();
    document_result=documentBuilder.parse(str_FileName);
   } catch (Exception e) {
    e.printStackTrace();
   }
   return document_result;
}

//////////////////////////////////////
////节点、属性、值 查找部分
//////////////////////////////////////

/*************************************
* 指定具体节点,获取标签体内容
* @param doc
* @param str_Label
* @return
*************************************/
public static String getElementFirstChildValueByNodeName(Element element){
   String str_result=null;
   Text text = (Text) element.getFirstChild();
   str_result=text.getNodeValue();
   return str_result;
}

/**************************************
* 指定节点名,从整个xml文件中找出所有此名的节点的集合
* @param doc
* @param str_Label
* @param str_Attribute
* @param str_Attribute_Value
* @return
***************************************/
public static Vector getNodesByNodeName(Document doc,String str_NodeName){
   Vector v_result=null;
   NodeList nl = doc.getElementsByTagName(str_NodeName); 
   System.out.println("【提示】XML文档中有"+nl.getLength()+"个<"+str_NodeName+">标签");
   int size=0;
   Node tempnode;
   if(nl != null){
    size = nl.getLength();
    v_result=new Vector();
    for(int i=0; i<size; i++)
    {
     tempnode= nl.item(i);
     v_result.add(tempnode);
    }
   }else{
    return null;
   }
   return v_result;
}


/*****************************************************
* 指定具体节点,指定此节点下的其他节点名,找出所有为其名的子节点
* @param node
* @param str_Label
* @return Vector 的集合
*****************************************************/
public static Vector getNoesByNodeName(Node node,String str_NodeName){
   Vector v_result=new Vector();
   Node node_temp;
   NodeList nodelist = node.getChildNodes();
   for(int i=0;i<nodelist.getLength();i++){
    node_temp=nodelist.item(i);
    if(node_temp.getNodeName().equals(str_NodeName))
     v_result.add(node_temp);
   }
   return v_result;
}

/**************************************
* 匹配节点属性名及属性值去获取特定的节点
* @param doc
* @param str_Label
* @param str_Attribute
* @param str_Attribute_Value
* @return
***************************************/
public static Node getNodeByAttributesValues(Document doc,String str_Label,String[] stra_Attributes,String[] stra_values){
   Node node_result=null;
   NodeList nl = doc.getElementsByTagName(str_Label); 
   System.out.println("【提示】xml文档中有"+nl.getLength()+"个<"+str_Label+">标签");
   int size=0;
   Node tempnode;
   String []stra_att=new String[stra_Attributes.length];
   if(nl != null)
    size = nl.getLength();
   for(int i=0; i<size; i++)
   {
    tempnode= nl.item(i);
    int i_falg=0;
    for(int j=0;j<stra_att.length;j++){
     stra_att[j]=KParseXML.getAttrValue(tempnode,stra_Attributes[j]);
     if(stra_att[j].equals(stra_values[j])){
      i_falg++;
     }
    }
    if(i_falg==stra_Attributes.length)
    {
      System.out.println("【提示】传递的要与指定的标签属性比较的参数都满足条件!");
      node_result=tempnode;
      break;
    }else{
     node_result=null;
    }
   }
   return node_result;
}


/*************************
* 获取某个节点某个属性的值
* @param b
* @param attrName
* @return
*************************/
public static String getAttrValue(Node node,String str_AttrName)
{
   String str_result=null; 
   NamedNodeMap nnm = node.getAttributes();
   if(nnm == null)
    return null;
   for(int i=0; i<nnm.getLength(); i++)
   {
    if(nnm.item(i).getNodeName().equals(str_AttrName))
     str_result = nnm.item(i).getNodeValue();
   }
   return str_result;
}


///////////////////////////
//修改部分
//////////////////////////

/*********************************
* 指定节点,指定属性名,修改属性值
* @param node
* @param attrName
* @param attrValue
*********************************/
public static void setAttrValue(Node node,String attrName,String attrValue){
   NamedNodeMap attributes = node.getAttributes();
   if(attributes !=null)
   for(int i=0;i<attributes.getLength();i++){
    String str_attributes_name = attributes.item(i).getNodeName();
    if(str_attributes_name.equals(attrName))
    attributes.item(i).setNodeValue(attrValue);
   }
}

/******************************
* 指定具体标签,设置其标签体的值
* @param element
* @param str_value
* @return
******************************/
public static boolean setElementValue(Element element,String str_value){
   boolean b_result=true;
   try{
    Node text = element.getFirstChild();
    text.setNodeValue(str_value);
   }catch(Exception e){
    b_result=false;
    e.printStackTrace();
   }
   return b_result;
}




/////////////////////////////
//文件处理部分
////////////////////////////

/*********************************
* 在xml做好修改后,保存xml文件
* @param document
* @param filename
* @return
********************************/
public static boolean doc2XmlFile(Document document, String filename) {

   boolean flag = true;
   try {
    /** 将document中的内容写入文件中 */
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    /** 编码 */
    // transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
    DOMSource source = new DOMSource(document);
    StreamResult result = new StreamResult(new File(filename));
    transformer.transform(source, result);
   } catch (Exception ex) {
    flag = false;
    ex.printStackTrace();
   }
   return flag;
}

}

//文件3

package com.kelsen.test;

import java.net.URL;
import java.util.Vector;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.kelsen.beans.imagehelper.ImageToXML;
import com.kelsen.beans.xmlhelper.KParseXML;

public class XMLTest {

public XMLTest(){
   //testSetElementValue();
   ImageToXMLTest();
   ImageToXMLReadImage();
}


/**
* 把图片文件转成BASE64Encoder存入xml文件中
*/
public void ImageToXMLTest(){
   URL url_FileName=this.getClass().getClassLoader().getResource("com/kelsen/files/image/kelsen.jpg");
   String str_FileName=url_FileName.getFile();
   String content = ImageToXML.readImage(str_FileName);
   testSetElementValue(content);
}

/**
* 从xml文件取得图片的BASE64Encoder内容从而创建本地图片文件
*/
public void ImageToXMLReadImage(){
   String str_context=readImage();
   ImageToXML.saveImage("D:/kkkk.jpg", str_context);
}


public String readImage(){
   URL url_FileName = this.getClass().getClassLoader().getResource("com/kelsen/files/xml/kelsen.xml");
   String str_FileName=url_FileName.getFile();
   Document document = KParseXML.createDocument(str_FileName);
   Vector nodes_get = KParseXML.getNodesByNodeName(document, "guilin");
   if(nodes_get!=null && nodes_get.size()>0){
    Element element=(Element) nodes_get.get(0);
    return KParseXML.getElementFirstChildValueByNodeName(element);
   }
   return null;
}


/**
* 标签体内容修改测试
*
*/
public void testSetElementValue(String str_context){
   URL url_FileName = this.getClass().getClassLoader().getResource("com/kelsen/files/xml/kelsen.xml");
   String str_FileName=url_FileName.getFile();
   Document document = KParseXML.createDocument(str_FileName);
   Vector nodes_get = KParseXML.getNodesByNodeName(document, "guilin");
   if(nodes_get!=null && nodes_get.size()>0){
    Element element=(Element) nodes_get.get(0);
    KParseXML.setElementValue(element,str_context);
   }
   KParseXML.doc2XmlFile(document, str_FileName);
   System.out.println("End 改完且保存结束!");
}

public static void main(String args[]){
   new XMLTest();
}
}

//文件4 kelsen.xml

<?xml version="1.0" encoding="GB2312"?>
<china name="中国">
<guangdong name="广东省" description="省级标签">
   <guangzhou>广州</guangzhou>
   <shenzhen>深圳</shenzhen>
   <shantou>汕头</shantou>
</guangdong>
<guangxi name="广西省" description="省级标签">
   <guilin>桂林</guilin>
</guangxi>
<hunan name="湖南省" description="省级标签">
   <changsha>长沙</changsha>
   <zhuzhou>株洲</zhuzhou>
</hunan>
</china>


此文为转载,出处http://hi.baidu.com/kelsen/blog/item/d552f2bfebc26b0d19d81f31.html
分享到:
评论

相关推荐

    java心电图xml解析.zip

    在源代码中,可能会看到使用Java的`javax.xml.parsers`和`org.w3c.dom`等库进行DOM解析,或者使用`javax.xml.stream`进行StAX解析。对于SAX解析,可能涉及`org.xml.sax`库和自定义的事件处理器。 通过研究这个...

    XML.rar_XML java_java xml_java xml Document sa_xml

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它在IT行业中...通过DOM解析器,你可以轻松地读取XML文件,对其进行操作,然后将修改后的数据保存回XML文件,从而实现数据的动态管理和交换。

    XML解析、读取

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。在Java中,处理XML文件是一项常见的任务,无论是读取还是写入XML文档,都有多种方法可供选择。本节将...

    java版everything+纯java不用任何包读取office中word文件

    2. **解析XML内容**:Java标准库提供了`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`等类,用于解析XML文件。通过这些API,我们可以读取并处理XML数据,找出我们需要的文本、样式等信息。 3...

    android 自定义xml存储方式以及存储位置

    总结来说,Android中的XML存储涉及到内存与文件系统的交互,需要理解XML的基本语法,以及Android提供的各种存储API。通过自定义XML存储方式,可以灵活地管理和持久化应用程序的数据。在实际项目中,应根据需求选择...

    定时从ftp下载xml并解析为图片

    Java提供了内置的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口来解析XML文档。此外,也可以使用第三方库如JDOM、DOM4J或者FastXML的Jackson XML解析器,它们提供了更方便的API来处理XML...

    javaGUI小画板

    在XML读取方面,Java提供了`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`等类来解析XML文档。这些类可以帮助程序将XML文件转换为内存中的对象结构,便于访问和修改数据。当用户打开或保存...

    纯Java动态生成SVG饼图与JFreeChart超强功能生成SVG图表

    我们使用了一个名为 `colors` 的数组来存储饼图的颜色,另外,我们还定义了一个名为 `initialize` 的方法,该方法用于生成 SVG 文件的头部信息和pies 的 path 部分。 二、JFreeChart 生成 SVG 图表 JFreeChart 是...

    关于XML的补考试卷

    图片文件可能是用来辅助理解某些概念或示例,如XML结构图、XPath示例等。 通过这次补考,同学们将进一步掌握XML的核心概念,提升对XML文档的读写、解析和验证能力,为后续的学习和工作打下坚实基础。

    IBM developerWorks 教程:XML简介

    XML支持外部资源的引用,如图片、脚本文件等。 **安全性** 在处理XML文档时,需要注意防止注入攻击等安全问题。 **Web服务** XML是Web服务中常用的数据交换格式,因为它能够跨平台传输数据。 **其它标准** ...

    docx4j-3.3.7.jar fmath-mathml-java.jar jdom-2.0.6.jar

    docx4j是一款开源的Java库,主要用于创建、读取和修改Microsoft Office Open XML (OOXML) 格式的文档,如.docx、.xlsx和.pptx。这个版本3.3.7提供了对XML和Open Packaging Convention(OPC)格式的支持,使得开发者...

    JDK,Jquery,W3Shool,API,离线版

    **JDK**(Java Development Kit)是Java编程语言的核心组件,包含了Java运行环境、Java工具集和Java标准库。它是开发和运行Java应用程序的基础。JDK中的主要组件包括: 1. **Java编译器(javac)**:将源代码编译成...

    XML笔记1

    XML(eXtensible Markup Language)是一种用于结构化数据的标记语言,它主要用于存储和传输数据。XML的设计目的是传输和存储数据,而不是显示数据,这与HTML(Hypertext Markup Language)有着明显的区别。XML的名称...

    北大青鸟ACCP6.0 第三学期 Y2 XML公共课

    XML(eXtensible Markup Language)是一种用于标记数据的语言,由W3C组织制定,它的设计目的是传输和存储数据,而不是显示数据。在北大青鸟ACCP6.0第三学期Y2的XML公共课中,学生将深入学习XML的基础知识和解析技术...

    常用的java工具类

    - `javax.xml.parsers`和`org.w3c.dom`:用于解析和操作XML文档。 以上只是Java工具类中的冰山一角,实际开发中还有更多实用的工具类,如Apache Commons、Google Guava等第三方库,它们为Java开发提供了更为强大和...

    常用的30个java工具类

    Java中的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`等类用于解析XML文档,`javax.xml.transform.TransformerFactory`和`javax.xml.transform.Transformer`处理XML的转换。 5. **HTTPS**:...

    彩信网关程序java

    Java的`javax.xml.parsers`和`org.w3c.dom`包提供了处理XML的工具。 5. **数据库操作**:彩信网关可能需要存储和检索用户信息、消息状态等数据,这需要用到数据库。Java的JDBC(Java Database Connectivity)接口...

    w3school 帮助文档

    除了上述核心技术,w3school的文档可能还涵盖了XML(可扩展标记语言)、JSON(JavaScript Object Notation)、Ajax、Bootstrap、Vue.js等前端开发相关的知识,以及服务器端语言如PHP、Python和Java的基础教程。...

    JAVA 范例大全 光盘 资源

    第10章 I/O及文件操作 196 实例78 创建文件和目录 196 实例79 查找文件 199 实例80 删除文件夹和文件 201 实例81 文件复制与移动 204 实例82 多种方式读取文件内容 209 实例83 多种方式写文件 213 实例84 ...

    android 读取展示office2007.zip

    3. **解析XML文件**:XML文件可以用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口进行解析。创建`Document`对象,然后使用XPath表达式查询文档中的特定元素,以获取内容和样式信息...

Global site tag (gtag.js) - Google Analytics