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

本文详细解析了XML文件中命名空间与属性的区别及其应用场景,通过一个具体的Java代码实例展示了如何生成带有命名空间的XML文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目需要生成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;
	}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值