导航:首页 > 编程语言 > java注释xml

java注释xml

发布时间:2022-07-09 00:56:42

① 用java的SAX解析xml文件能解析出注释吗

用 dom4j / jdom 都可以

jar包 :dom4j.jar
/*
* 使用Dom4j来解析xml
*/
public static void parseXML()
{
SAXReader parser=new SAXReader();//dom4j的解析器
Reader reader;
try{
reader = new FileReader("People.xml");
Document doc=parser.read(reader); //把xml加载到document对象中

Element root=doc.getRootElement(); //按照树的思想进行解析
List<Element> list=root.elements();//得到下一级元素集合 elementIterator()
for(Element people:list)//people
{
String eleName=people.getName();//元素名
List<Attribute> attributes=people.attributes();//属性的集合
for(Attribute attribute:attributes)
{
String attName=attribute.getName();
String attValue=attribute.getValue();
System.out.println(attName+"---"+attValue);
}
//得到people的下一级元素
List<Element> peoplePros=people.elements();
for(Element pro:peoplePros)
{
String peopleProName=pro.getName();
String peopleProValue=pro.getTextTrim();
System.out.println(peopleProName+"----"+peopleProValue);
}
}
}catch(Exception e){
e.printStackTrace();
}
}

自己研究下

② JAVA读写XML,加下注释

public class w3c_Xml {
//得到dom的解析工厂

static DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

static DocumentBuilder builder = null;

public static void readXML() {
try {
//得到真正的解析器
builder = factory .newDocumentBuilder();
//得到此xml文件的容器上下文或句柄或根节点
Document document = builder.parse(new File("E:\\Projects\\NyWeb\\NyWebBase\\version1.0\\Project\\fd\\WebRoot\\WEB-INF\\web.xml"));
//得到根节点
Element rootElement = document.getDocumentElement();
//在xml中把Header前面的空格也当成了一个节点,所以我们拿值时还要在拿NodeList
NodeList list = rootElement.getElementsByTagName("Header");
Element element = (Element) list.item(0);
//在java中他把<Header>也作为了一个节点,所以我们拿值时,拿他下面的第一个孩子节点,即getFirstChild然后在getNodeValue()才能拿到值
System.out.println(element.getChildNodes().item(0).getNodeValue());

} catch (Exception e) {
System.out.println("exception:" + e.getMessage());
}
}

public static void writeXML(Document document,String filename)
{
try {
builder = factory .newDocumentBuilder();
document.normalize();

/** 将document中的内容写入文件中 */
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
//编码
DOMSource source = new DOMSource(document);
PrintWriter pw = new PrintWriter(new FileOutputStream(filename));
StreamResult result = new StreamResult(pw);
transformer.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
}

}

public static void updateXML()
{
try {
builder = factory .newDocumentBuilder();
Document document = builder.parse(new File("E:\\Projects\\NyWeb\\NyWebBase\\version1.0\\Project\\fd\\WebRoot\\WEB-INF\\web.xml"));
Node root = document.getDocumentElement();
/**如果root有子元素*/
if(root.hasChildNodes())
{
NodeList ftpnodes = root.getChildNodes();
/**循环取得ftpnodes所有节点*/
for(int i=0;i<ftpnodes.getLength();i++)
{
Node ftpList = ftpnodes.item(i);
//System.out.println(ftpList.getTextContent());
}
for(int i=0;i<ftpnodes.getLength();i++)
{
Node ftpList = ftpnodes.item(i);
ftpList.setTextContent(ftpList.getTextContent()+" update");
}
}
writeXML(document,"E:\\Projects\\NyWeb\\NyWebBase\\version1.0\\Project\\fd\\WebRoot\\WEB-INF\\web.xml");

} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args)
{
readXML();
updateXML();
}
}

③ java的xml的解析方式有什么,他们的解析流程是怎么样的,有什么区别

答:4种。(或者说是两种,因为JDOM和DOM4J是DOM的两个特殊情况)

1.SAX解析
解析方式是事件驱动机制!

SAX解析器,逐行读取XML文件解析,每当解析到一个标签的开始/结束/内容/属性时,触发事件。

可以在这些事件发生时,编写程序进行相应的处理。

优点:

分析能够立即开始,而不是等待所有的数据被处理。

逐行加载,节省内存,有助于解析大于系统内存的文档。

有时不必解析整个文档,它可以在某个条件得到满足时停止解析。

缺点:

1.单向解析,无法定位文档层次,无法同时访问同一个文档的不同部分数据(因为逐行解析,当解析第n行时,第n-1行)已经被释放了,无法再对其进行操作)。

2. 无法得知事件发生时元素的层次, 只能自己维护节点的父/子关系。

3. 只读解析方式, 无法修改XML文档的内容。

2. DOM解析
是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个 文档和内存中建立文档树模型。程序员可以通过操作文档树, 来完成数据的获取 修改 删除等。

优点:

文档在内存中加载, 允许对数据和结构做出更改。访问是双向的,可以在任何时候在树中双向解析数据。

缺点:

文档全部加载在内存中 , 消耗资源大。

3. JDOM解析
目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一 个Java特定模型,JDOM一直得到大力推广和促进。

JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题” (根据学习曲线假定为20%)

优点:

使用具体类而不是接口,简化了DOM的API。

大量使用了Java集合类,方便了Java开发人员。

缺点:

没有较好的灵活性。

性能不是那么优异。

4. DOM4J解析
它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath 支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项, DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一 个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。

目前许多开源项目中大量采用DOM4J , 例如:Hibernate。

④ java 如何去掉xml注释串

你好,你可以使用xmlFileContent.replaceAll("(?s)<!--.*?-->","");
这样就可以去掉所有的注释了

⑤ 怎么通过java代码向xml文件中添加注释

package com.tuobao.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;

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;

public class testDom4j {

private static final String path = "f:" + java.io.File.separator
+ "eee.xml";

/**
* @param args
*/
public static void main(String[] args) {
// System.out.println(createXMLFile(path));
// System.out.println(modiXMLFile(path, path));
System.out.println(formatXMLFile(path));
}

/**
* 建立一个XML文档,文档名由输入属性决定
*
* @param param
* filename 需建立的文件名
* @return返回操作结果, 0表失败, 1表成功
*/
public static int createXMLFile(String filename) {
/** 返回操作结果, 0表失败, 1表成功 */
int returnValue = 0;
/** 建立document对象 */
Document document = DocumentHelper.createDocument();
/** 建立XML文档的根books */
Element booksElement = document.addElement("books");
/** 加入一行注释 */
booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");
/** 加入第一个book节点 */
Element bookElement = booksElement.addElement("book");
/** 加入show属性内容 */
bookElement.addAttribute("show", "yes");
/** 加入title节点 */
Element titleElement = bookElement.addElement("title");
/** 为title设置内容 */
titleElement.setText("Dom4j Tutorials");

/** 类似的完成后两个book */
bookElement = booksElement.addElement("book");
bookElement.addAttribute("show", "yes");
titleElement = bookElement.addElement("title");
titleElement.setText("Lucene Studing");
bookElement = booksElement.addElement("book");
bookElement.addAttribute("show", "no");
titleElement = bookElement.addElement("title");
titleElement.setText("Lucene in Action");

/** 加入owner节点 */
Element ownerElement = booksElement.addElement("owner");
ownerElement.setText("O'Reilly");

try {
/** 将document中的内容写入文件中 */
XMLWriter writer = new XMLWriter(new FileWriter(new java.io.File(
filename)));
writer.write(document);
writer.flush();
writer.close();
/** 执行成功,需返回1 */
returnValue = 1;
} catch (Exception ex) {
returnValue = 0;
ex.printStackTrace();
}
return returnValue;
}

/**
* 修改XML文件中内容,并另存为一个新文件 重点掌握dom4j中如何添加节点,修改节点,删除节点
*
* @param filename
* 修改对象文件
* @param newfilename
* 修改后另存为该文件
* @return 返回操作结果, 0表失败, 1表成功
*/
public static int modiXMLFile(String filename, String newfilename) {
int returnValue = 0;
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new java.io.File(filename));
/** 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no */
/** 先用xpath查找对象 */
List list = document.selectNodes("/books/book/@show");
Iterator iter = list.iterator();
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
if (attribute.getValue().equals("yes")) {
attribute.setValue("no");
}
}

/**
* 修改内容之二: 把owner项内容改为"测试修改"
* 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type
*/
list = document.selectNodes("/books/owner");
iter = list.iterator();
if (iter.hasNext()) {
Element ownerElement = (Element) iter.next();
ownerElement.setText("测试修改");
Element dateElement = ownerElement.addElement("date");
dateElement.setText("2008-09-11");
dateElement.addAttribute("type", "日期");
}

/** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */
list = document.selectNodes("/books/book");
iter = list.iterator();
while (iter.hasNext()) {
Element bookElement = (Element) iter.next();
Iterator iterator = bookElement.elementIterator("title");
while (iterator.hasNext()) {
Element titleElement = (Element) iterator.next();
if (titleElement.getText().equals("Dom4j Tutorials")) {
bookElement.remove(titleElement);
}
}
}

try {
/** 格式化输出,类型IE浏览一样 */
OutputFormat format = OutputFormat.createPrettyPrint();
/** 指定XML编码 */
// format.setEncoding("GBK");
/** 将document中的内容写入文件中 */
// XMLWriter writer = new XMLWriter(new FileWriter(new
// File(newfilename)),format);
// 保证编码为UTF-8,支持中文写入
XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
newfilename)), format);
writer.write(document);
writer.flush();
writer.close();
/** 执行成功,需返回1 */
returnValue = 1;
} catch (Exception ex) {
returnValue = 0;
ex.printStackTrace();
}

} catch (Exception ex) {
ex.printStackTrace();
}
return returnValue;
}

/**
* 格式化XML文档,并解决中文问题
*
* @param filename
* @return
*/
public static int formatXMLFile(String filename) {
int returnValue = 0;
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
XMLWriter writer = null;
/** 格式化输出,类型IE浏览一样 */
OutputFormat format = OutputFormat.createPrettyPrint();
/** 指定XML编码 */
format.setEncoding("utf-8");
writer = new XMLWriter(new FileWriter(new File(filename)), format);
writer.write(document);
writer.flush();
writer.close();
/** 执行成功,需返回1 */
returnValue = 1;
} catch (Exception ex) {
returnValue = 0;
ex.printStackTrace();
}
return returnValue;
}
}
这个希望对你有用。。

阅读全文

与java注释xml相关的资料

热点内容
自己购买云主服务器推荐 浏览:419
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:189
pdf劈开合并 浏览:26
不能修改的pdf 浏览:750
同城公众源码 浏览:488
一个服务器2个端口怎么映射 浏览:297
java字符串ascii码 浏览:78
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332
android关联表 浏览:945
安卓导航无声音怎么维修 浏览:332
app怎么装视频 浏览:430
安卓系统下的软件怎么移到桌面 浏览:96
windows拷贝到linux 浏览:772
mdr软件解压和别人不一样 浏览:904
单片机串行通信有什么好处 浏览:340
游戏开发程序员书籍 浏览:860
pdf中图片修改 浏览:288
汇编编译后 浏览:491