网上查找众多资料后是一头雾水,在翻看了tdom的sample例子两天之后,终于清晰了一些 , 总结了一点:

1:需求:传入任意个偶数参数 , 创建下面的XML数据

<?xml version="1.0"?>
 <TestRecord>
	<TResult>
		<ParameterName>TestResult</ParameterName>
		<Value>0</Value>
		<ParameterName>2412_11M_FreqErr</ParameterName>
		<Value>6.27</Value>
		<ParameterName>2412_11M_Power</ParameterName>
		<Value>19.37</Value>
		<ParameterName>小红</ParameterName>
		<Value>18岁</Value>
		<ParameterName>功率</ParameterName>
		<Value>20.11dBm</Value>
		<ParameterName>频偏</ParameterName>
		<Value>1.20ppm</Value>
	</TResult>
</TestRecord>

接口 : GetXML [list "参数一" "值1" "参数二" "值二","参数三" "值三"]

实现

proc GetXML {argv} {
	
	if {[expr [llength $argv] % 2] != 0 } {
		puts "argv len wroung"
		return -1
	}

	dom createDocument "TestRecord" doc
	
	set root [$doc documentElement]
	
	set node [$doc createElement "TResult"]
	$root appendChild $node

	
	foreach {k v} $argv {
		set nodeKey [$doc createElement "ParameterName"]
		set nodeValue [$doc createElement "Value"]
		$node appendChild $nodeKey
		$node appendChild $nodeValue		
		
		$node appendChild $nodeKey
		$node appendChild $nodeValue
		
		set textKey [$doc createTextNode $k]
		set textValue [$doc createTextNode $v]

		$nodeKey appendChild $textKey
		$nodeValue appendChild $textValue
	}

	set reXML [$doc asXML]

	$doc delete

	return $reXML
}

下面是测试代码:

set testData [list "TestResult" "0" "2412_11M_FreqErr" "6.27" "2412_11M_Power" "19.37" "小红" "18" "功率" "20.11dBm" "频偏" "1.20ppm"]

set header {<?xml version="1.0" encoding="utf-8"?>}

set testData [append header \n[GetXML $testData]]

puts $testData

效果:使用TDOM创建,解析XML文档

 

2:需求 给定XML文档,解析出其中的给定元素

给定XML文档

<?xml version="1.0"?>
 <TestRecord>
	<TResult>
		<名称>小红</名称>
		<年龄>18</年龄>
		<城市>深圳</城市>
		<height>172cm</height>
	</TResult>
	<TResult>
		<名称>小兰</名称>
		<年龄>20</年龄>
		<城市>成都</城市>
		<height>167cm</height>
	</TResult>
</TestRecord>

这个就暂时随手简单实现了一下

实现:

set xmlText {<?xml version="1.0"?>
 <TestRecord>
	<TResult>
		<名称>小红</名称>
		<年龄>18</年龄>
		<城市>深圳</城市>
		<height>172cm</height>
	</TResult>
	<TResult>
		<名称>小兰</名称>
		<年龄>20</年龄>
		<城市>成都</城市>
		<height>167cm</height>
	</TResult>
</TestRecord>}

#解析
set doc 	[dom parse $xmlText]
set root 	[$doc documentElement]

#第一个 数据节点查找
set node	[$root firstChild]

set name 	[$node getElementsByTagName "名称"]
set age 	[$node getElementsByTagName "年龄"]
puts 		[$name text]
puts 		[$age text]

#下一个数据节点 查找
set node	[$node nextSibling]

set city 	[$node getElementsByTagName "城市"]
set height 	[$node getElementsByTagName "height"]
puts 		[$city text]
puts 		[$height text]

$doc delete

效果:使用TDOM创建,解析XML文档

当然 , 还有更加复杂的XML格式和更加简单地实现, 欢迎讨论.

相关文章: