日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML——写出XML文档(XSLT+StAX)

發(fā)布時間:2023/12/3 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML——写出XML文档(XSLT+StAX) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【0】README

0.1) 本文描述部分轉(zhuǎn)自 core java volume 2 , 旨在理解 XML——寫出XML文檔(XSLT+StAX) 的基礎(chǔ)知識 ;
0.2) for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter2/generateXML/


【1】寫出文檔(使用了 XSLT-eXtensible Stylesheet Language Transformation)

1) 使用XSLT寫出XML: 把DOM 樹寫出到輸入流中, 最容易的方式是使用可擴展的格式頁轉(zhuǎn)換(eXtensible Stylesheet Language Transformation)API; (干貨——XSLT定義)
2)我們把“不做任何操作”的轉(zhuǎn)換應(yīng)用與文檔,并且捕獲它的輸出。 為了將 DOCTYPE 節(jié)點納入輸出,我們還需要將 SYSTEM 和 PUBLIC 標識符設(shè)置為輸出屬性;
(干貨——寫出文檔方法一,采用Transformer)

Transformer t = TransformerFactory.newInstance().newTransformer();t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd");t.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "-//W3C//DTD SVG 20000802//EN");t.setOutputProperty(OutputKeys.INDENT, "yes");t.setOutputProperty(OutputKeys.METHOD, "xml");t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");t.transform(new DOMSource(doc), new StreamResult(Files.newOutputStream(file.toPath())));


3)另一種方式是使用 LSSerializer 接口, 為了獲取實例, 可以使用下面 的魔咒:
(干貨——寫出文檔方法二, 采用LSSerializer 接口)

DOMImplementation impl = doc.getImplementation(); DOMImplementationLS imlpLS = (DOMImplementationLS)impl.getFeature("LS", "3.0"); LSSerializer ser = implLS.createLSSerializer();
  • 3.1)如果需要空格和換行,可以設(shè)置下面的標志:
ser.getDomConfig().setParameter("format-pretty-print", true);
  • 3.2)然后可以很容易的將 文檔轉(zhuǎn)換為 字符串:
String str = ser.writeToString(doc);
  • 3.3)如果想要將輸出直接寫入到文件中, 則需要一個 LSOutput:
LSOutput out = imlpLS.createLSOutput();out.setEncoding("UTF-8");out.setByteStream(new FileOutputStream(new File(workDir + "generate2.xml")));ser.write(doc, out);


【2】使用StAX 寫 XML文檔(要知道, DOM解析器是基于SAX解析器的, DOM解析器比較復(fù)雜)

1)我們看到, 如果通過寫DOM樹的方法來產(chǎn)生 XML文件, 如果這個 DOM 樹沒有其他任何用途, 那么這種方式就不是很高效;
2)StAX API 是我們直接將 XML 樹寫出, 這需要從某個 OutputStream 中構(gòu)建一個XMLStreamWriter, 就像下面這樣:

XMLOutputFactory factory = XMLOutputFactory.instance(); XMLStreamWriter writer = factory.createXMLStreamWriter(out);
  • 2.1)要產(chǎn)生XML 文件頭, 需要調(diào)用
writer.writeStartDocument();
  • 2.2)然后調(diào)用
writer.writeStartElement(name);
  • 2.3)添加屬性調(diào)用
writer.writeAttribute(name , value);

3)現(xiàn)在,可以通過再次調(diào)用 writeStartElement 添加新的子節(jié)點, 或者用下面 的語句寫出字符:

writer.writerCharacters(text);
  • 3.1)再添加完所有子節(jié)點后, 調(diào)用
writer.writeEndElement(); 這會導(dǎo)致當前元素被關(guān)閉;
  • 3.2)要寫出沒有子節(jié)點的元素,可以使用下面的調(diào)用:
writer.writeEmptyElement(name);
  • 3.3)最后, 在文檔的結(jié)尾,調(diào)用
writer.writeEndDocument(); 這個調(diào)用將關(guān)閉所有元素;

(for source code , please visit https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/chapter2/StAXParser)
for detailed StAX, please visit http://blog.csdn.net/pacosonswjtu/article/details/50569728
(相關(guān)文章轉(zhuǎn)自(截圖如下): http://www.journaldev.com/1240/java-xml-tutorial)

總結(jié)

以上是生活随笔為你收集整理的XML——写出XML文档(XSLT+StAX)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。