在做一般的XML数据交换过程中,我更乐意传递XML字符串,而不是格式化的XML Document。这就涉及到XML字符串和Xml Document的转换问题,说白了这是个很简单的问题,本文就各种XML解析器分别列举如下,以方便自己今后查阅。
一、使用最原始的javax.xml.parsers,标准的jdk api
// 字符串转XML
String xmlStr = "......";
StringReader sr = new StringReader(xmlStr);
InputSource is = new InputSource(sr);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc = builder.parse(is);
//XML转字符串
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty("encoding","GB23121");//解决中文问题,试过用GBK不行
ByteArrayOutputStream bos = new ByteArrayOutputStream();
t.transform(new DOMSource(doc), new StreamResult(bos));
String xmlStr = bos.toString();
这里的XML DOCUMENT为org.w3c.dom.Document
二、使用dom4j后程序变得更简单
// 字符串转XML
String xmlStr = "......" ......
XML是一种可扩展置标语言,又称可扩展的编辑语言。XML文档的定义格式有两种:DTD和Schema格式,由于Schema是xml本身的,所以应用的非常普遍。xml的作用是文件的读写,所以在web开发中也得到了广泛应用,作为一种配置文件,充分发挥了它读写的功能。XML的解析方式有四种:DOM,SAX,JDOM,DOM4J。DOM是一种标准模型,也是W3C所推荐的。几种解析方式各有优缺点,但是DOM4J几种了前几种的有点,在web开发中得到广泛应用,本人也推荐掌握DOM4J。四种解析方式至少掌握一种即可,如果自己有时间精力最好全部掌握。下面是以DOM4J进行文件的读写实例:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4j {
public static ......
在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互。
今天就来讲一下Java 中使用dom4j来操作XML文件。
我们需要引入的包:
//文件包
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
//工具包
import java.util.Iterator;
import java.util.List;
//dom4j包
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
1、将XML文件的内容转化为String
/**
* doc2String
* 将xml文档内容转为String
* @return 字符串
* @param document
*/
public static String doc2String(Document document)
&nb ......
在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互。
今天就来讲一下Java 中使用dom4j来操作XML文件。
我们需要引入的包:
//文件包
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
//工具包
import java.util.Iterator;
import java.util.List;
//dom4j包
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
1、将XML文件的内容转化为String
/**
* doc2String
* 将xml文档内容转为String
* @return 字符串
* @param document
*/
public static String doc2String(Document document)
&nb ......
我这两天在CSDN论坛开了一个散分贴,想宣传一下我的书。大多数朋友还是很友好的,对我的支持和鼓励很多,我也很感激。
网址在这里:http://topic.csdn.net/u/20091216/22/5a6594be-21e6-459e-ab41-57755273f465.html
当然,也有朋友认为肖某人吹牛,说0bug不可能,并且隐隐有PK的意思,我呢没办法,写了个说明。
这里想了一下,也在这里share出来,大家看看,如果觉得肖某人有诚意呢,给个好,诚意还不够呢,继续探讨。
呵呵,还是那句话,一家之言,欢迎拍砖哈。
原文就不摘录了,太长,这个问题的起源呢,是我书目录中有个提法,建议不要用do...while()语句,因为有潜在的bug风险,当然,一部分朋友就此开始论战,举出各种例子来证明肖某人胡说,甚至还设置一些程序陷阱,来故意制作bug,以证明不用do...while()语句,就不可以写出程序。
最后没办法,我回了个长文,这里贴给大家看。
嗯,刚才哄娃睡觉呢,没空想问题。
现在想了一下,我发现我被你绕进去了。
do...while()是典型的循环语句,被你用作宏包容器了。
嗯,我的无错化程序设计原则里面有一条,严禁一语多义。
这个呢,有两层意思:
1、不要在同一行写太多代码。阅读的人无法理解。
2、不要故 ......
我这两天在CSDN论坛开了一个散分贴,想宣传一下我的书。大多数朋友还是很友好的,对我的支持和鼓励很多,我也很感激。
网址在这里:http://topic.csdn.net/u/20091216/22/5a6594be-21e6-459e-ab41-57755273f465.html
当然,也有朋友认为肖某人吹牛,说0bug不可能,并且隐隐有PK的意思,我呢没办法,写了个说明。
这里想了一下,也在这里share出来,大家看看,如果觉得肖某人有诚意呢,给个好,诚意还不够呢,继续探讨。
呵呵,还是那句话,一家之言,欢迎拍砖哈。
原文就不摘录了,太长,这个问题的起源呢,是我书目录中有个提法,建议不要用do...while()语句,因为有潜在的bug风险,当然,一部分朋友就此开始论战,举出各种例子来证明肖某人胡说,甚至还设置一些程序陷阱,来故意制作bug,以证明不用do...while()语句,就不可以写出程序。
最后没办法,我回了个长文,这里贴给大家看。
嗯,刚才哄娃睡觉呢,没空想问题。
现在想了一下,我发现我被你绕进去了。
do...while()是典型的循环语句,被你用作宏包容器了。
嗯,我的无错化程序设计原则里面有一条,严禁一语多义。
这个呢,有两层意思:
1、不要在同一行写太多代码。阅读的人无法理解。
2、不要故 ......
如下代码编译运行就会提示R6002错误 #include
struct xxx{
float score;
};
int main()
{
xxx* p = new xxx;
scanf( "%f" , &p->score );
delete p;
} 解决方案很简单 int main()
{
xxx* p = new xxx;
scanf( "%f" , &p->score );
delete p;
float x=0.1;//增加没有意义的一行
}
......
如对Android原生(Natvie)C开发还任何疑问,请参阅http://emck.avaw.com/?p=205
虽然现在能通过交叉环境编译程序,并push到Android上执行,但那只是console台程序,是不是有些单调呢?下面就要看如何通过Linux的 framebuffer 技术在Android上画图形,关于Linux的framebuffer技术,这里就不再详细讲解了,请大家google一下。
操作framebuffer的主要步骤如下:
1、打开一个可用的FrameBuffer设备;
2、通过mmap调用把显卡的物理内存空间映射到用户空间;
3、更改内存空间里的像素数据并显示;
4、退出时关闭framebuffer设备。
下面的这个例子简单地用framebuffer画了一个渐变的进度条,代码 framebuf.c 如下:
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
inline static unsigned short int make16color(unsigned char r, unsigned char g, unsigned char b)
{
return (
(((r >> 3) & 31) << 11) |
(((g >> 2) & 63) << 5) |
((b >> 3) & 31) );
}
int main() {
......