Android開發之XML文件生成

昨天我們做了XML文件的內容解析,但我們有時候和服務器交互的時候需要生成json(講解完XML後就講解json的解析和生成)或者XML格式的數據。於是就有了生成XML格式數據的需求。

生成XML數據有很多種方式,最笨的方法就是一個一個去拼接,然後通過IO流寫入文件,當然這非常的麻煩。因爲博主搞的是安卓開發,常用的就是Android自帶的XmlSerializer來生成XML文件內容。

形成的參考文件和昨天內容一樣:

<?xml version='1.0' encoding='UTF-8' ?>
<菜系>
<span style="white-space:pre">	</span><菜 id="1">
<span style="white-space:pre">		</span><菜名>飯炒蛋</菜名>
<span style="white-space:pre">		</span><圖片路徑>d:\pic</圖片路徑>
<span style="white-space:pre">	</span>		<售價>10.0元</售價>
<span style="white-space:pre">	</span></菜>
<span style="white-space:pre">	</span><菜 id="2">
<span style="white-space:pre">		</span><菜名>蛋炒飯</菜名>
<span style="white-space:pre">		</span><圖片路徑>d:\pic</圖片路徑>
<span style="white-space:pre">		</span><售價>10.0元</售價>
<span style="white-space:pre">	</span>></菜>
</菜系>

首先,一般來說,XML數據格式包括一個標籤名和標籤值,所以博主定義了一個product類(這裏只做最底層的標籤,只用作參考說明,在實際開發中可以將所有標籤都做成一個類,便於管理,也使代碼能夠整潔規範。在這裏也沒有加入attribute,有興趣的同學可以將這個類做的更完善,加入attribute屬性值)

public class Product {
	private String tagName;
	private String tagValue;

	public Product(String tagName, String tagValue) {
		super();
		this.tagName = tagName;
		this.tagValue = tagValue;
	}

	public Product(String tagName) {
		super();
		this.tagName = tagName;
	}

	public String getTagValue() {
		return tagValue;
	}

	public void setTagValue(String tagValue) {
		this.tagValue = tagValue;
	}

	public String getTagName() {
		return tagName;
	}

	/**
	 * 序列化節點
	 * 
	 * @param serializer
	 */
	public void serializerLeaf(XmlSerializer serializer) {
		try {
			serializer.startTag(null, tagName);
			if (StringUtils.isBlank(tagValue)) {
				tagValue = "";
			}
			serializer.text(tagValue);
			serializer.endTag(null, tagName);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

接下來是生成XML數據代碼

1、生成所有子節點

	private void serizlizerProductCategory(XmlSerializer serializer)
			throws IOException {

		for (int i = 1; i <= 2; i++) {
			serializer.startTag(null, "菜");
			serializer.attribute("", "id", i + "");
			// leaf
			if (i == 1) {
				Product product = new Product("菜名", "飯炒蛋");
				Product product1 = new Product("圖片路徑", "d:\\pic");
				Product product2 = new Product("售價", "10.0元");
				product.serializerLeaf(serializer);
				product1.serializerLeaf(serializer);
				product2.serializerLeaf(serializer);
			} else if (i == 2) {
				Product product = new Product("菜名", "蛋炒飯");
				Product product1 = new Product("圖片路徑", "d:\\pic");
				Product product2 = new Product("售價", "10.0元");
				product.serializerLeaf(serializer);
				product1.serializerLeaf(serializer);
				product2.serializerLeaf(serializer);

			}
			serializer.endTag(null, "菜");
		}
	}

2、生成根節點及整個文件內容

	public void creatProductXml() {
		XmlSerializer serializer = Xml.newSerializer();

		try {
			StringWriter writer = new StringWriter();
			serializer.setOutput(writer);
			/**
			 * 這個方法必須在setOutput之後。
			 */
			serializer.startDocument("UTF-8", null);
			serializer.startTag(null, "菜系");
			serizlizerProductCategory(serializer);
			serializer.endTag(null, "菜系");

			serializer.endDocument();

			System.out.println(writer.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

最後從logcat中可以看到打印出來的內容和上面的XML文檔內容一樣。至此,只需要通過IO生成一個.xml文件,將內容寫進去即可。文件IO流的讀寫在後續的文章會再詳細講到,這裏不再描述。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章