您的位置:首页 > 移动开发 > Android开发

android应用开发之xml生成————————xml命名域与属性

2013-11-16 11:15 441 查看
项目需要生成xml,样式较为复杂,几经曲折终于搞定,生成xml的样式如下:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<root xmlns="china">
 ... ...
	<BodyList xmlns:sax="male" xml:name="chinese">
		<Body>
			<sax:xxid>中年男性</sax:xxid>
			<name:xxname>尼大叔</name:xxname>
		</Body>
		<Body>
		 ... ...
		</Body>
	</BodyList>
	... ...
</root>


看上的xml中xmlns就是属于tag的属性,而sax则属于一个命名空间,这是个什么东西呢

言而总之就是说xxid引用的是xmlns:sax的值,此处代表性别男性,而他自己可以是中年男性,也可以是小男孩,也可以是青年或老年人等

我的理解命名空间 类似与java的包的概念

实现代码如下

public String createXml() {
		XmlSerializer xmlSerializer = Xml.newSerializer();
		StringWriter writer = new StringWriter();
		try {
			xmlSerializer.setOutput(writer);
			xmlSerializer.startDocument("UTF-8", true);

			/**
			 * 此处生成的是<root xmlns="china">
			 */
			xmlSerializer.startTag("", "root");
			xmlSerializer.attribute("", "xmlns", "china");

			// ... ...
			
			/**
			 * 这里会生成命名空间,命名空间和属性从表面看最大区别就是:
			 * 声明的时候(应该说赋值的时候),一个带前缀,一个不带前缀
			 */
			xmlSerializer.setPrefix("sax", "max");
			xmlSerializer.setPrefix("name", "chinese");
			xmlSerializer.startTag("", "BodyList");
			
			xmlSerializer.startTag("", "Body");
			
			/**
			 * 对于命名空间值的运用,把starttag的namespace参数添加上去相应的即可
			 * public abstract XmlSerializer startTag (String namespace, String name) 
			 */
			xmlSerializer.startTag("sax", "xxid");
			xmlSerializer.text("中年大叔");
			xmlSerializer.endTag("sax", "xxid");
			
			/**
			 * 如果此处设置前缀的话(即调用方法setPrefix)就会生成错误的结果
			 */
			xmlSerializer.startTag("name", "xxname");
			xmlSerializer.text("尼大叔"); //这个是中间的文字
			xmlSerializer.endTag("name", "xxname");
			
			xmlSerializer.endTag("", "Body");
			
			xmlSerializer.endTag("", "BodyList");
			// ... ...

			// 文档结束
			xmlSerializer.endTag("", "root");
			xmlSerializer.endDocument();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		String resultString = writer.toString();
		try {
			if (writer != null) {
				writer.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return resultString;
	}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: