導航:首頁 > 編程語言 > 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相關的資料

熱點內容
同城公眾源碼 瀏覽:474
一個伺服器2個埠怎麼映射 瀏覽:282
java字元串ascii碼 瀏覽:59
台灣雲伺服器怎麼租伺服器 瀏覽:460
旅遊手機網站源碼 瀏覽:315
android關聯表 瀏覽:929
安卓導航無聲音怎麼維修 瀏覽:320
app怎麼裝視頻 瀏覽:423
安卓系統下的軟體怎麼移到桌面 瀏覽:80
windows拷貝到linux 瀏覽:753
mdr軟體解壓和別人不一樣 瀏覽:886
單片機串列通信有什麼好處 瀏覽:324
游戲開發程序員書籍 瀏覽:848
pdf中圖片修改 瀏覽:275
匯編編譯後 瀏覽:478
php和java整合 瀏覽:833
js中執行php代碼 瀏覽:447
國產單片機廠商 瀏覽:62
蘋果手機怎麼設置不更新app軟體 瀏覽:289
轉行當程序員如何 瀏覽:498