以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  [求助]如何利用xpath表达式来表示一个元素中的两个子元素?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=62093)


--  作者:lxmxn
--  发布时间:5/2/2008 4:55:00 PM

--  [求助]如何利用xpath表达式来表示一个元素中的两个子元素?
<CIM><INSTANCE CLASSNAME="CIM_DataFile"><PROPERTY NAME="FileSize" TYPE="uint64"><VALUE>247296</VALUE>
</PROPERTY>
<PROPERTY NAME="Name" TYPE="string"><VALUE>e:\tool\gawk.exe</VALUE>
</PROPERTY>
</INSTANCE>
<INSTANCE CLASSNAME="CIM_DataFile"><PROPERTY NAME="FileSize" TYPE="uint64"><VALUE>220</VALUE>
</PROPERTY>
<PROPERTY NAME="Name" TYPE="string"><VALUE>e:\tool\i.txt</VALUE>
</PROPERTY>
</INSTANCE>
<INSTANCE CLASSNAME="CIM_DataFile"><PROPERTY NAME="FileSize" TYPE="uint64"><VALUE>9</VALUE>
</PROPERTY>
<PROPERTY NAME="Name" TYPE="string"><VALUE>e:\tool\run.bat</VALUE>
</PROPERTY>
</INSTANCE>
<INSTANCE CLASSNAME="CIM_DataFile"><PROPERTY NAME="FileSize" TYPE="uint64"><VALUE>0</VALUE>
</PROPERTY>
<PROPERTY NAME="Name" TYPE="string"><VALUE>e:\tool\temp.xml</VALUE>
</PROPERTY>
</INSTANCE>
</CIM>

上面是我的 xml 文件(myxml.xml),利用的解析工具是 XMLStarLet(xmlstar.sourceforge.net),请问怎么用 xpath 表达式来同时表示每个 INSTANCE 元素中属性为 NAME 的值呢?

我用的命令是

xml sel -t -m "//PROPERTY[1]" -v "concat(VALUE,'')" -o "," -m "//PROPERTY[2]" -v "concat(VALUE,'')" -n myxml.xml

但是不行,请教该如何写这个xpath表达式,怎么表示里面的两个值呢?

我得到的结果是
以下内容为程序代码:
247296,e:\tool\gawk.exe
e:\tool\i.txt
e:\tool\run.bat
e:\tool\temp.xml
220,e:\tool\gawk.exe
e:\tool\i.txt
e:\tool\run.bat
e:\tool\temp.xml
9,e:\tool\gawk.exe
e:\tool\i.txt
e:\tool\run.bat
e:\tool\temp.xml
0,e:\tool\gawk.exe
e:\tool\i.txt
e:\tool\run.bat
e:\tool\temp.xml

我想提取出的数据像下面这样该怎么写呢?
以下内容为程序代码:
0,e:\tool\temp.xml
9,e:\tool\run.bat
220,247296,e:\tool\i.txt
247296,e:\tool\gawk.exe


--  作者:lxmxn
--  发布时间:5/4/2008 1:28:00 PM

--  
过了2天了,就没有人可以帮一下我吗?

我顶起来……


--  作者:arthennala
--  发布时间:5/26/2008 10:03:00 AM

--  
可以试试用属性来定位 根据属性值name的不同来定位
--  作者:lxmxn
--  发布时间:5/26/2008 11:45:00 PM

--  
以下是引用arthennala在2008-5-26 10:03:00的发言:
可以试试用属性来定位 根据属性值name的不同来定位


多谢兄的指点,已经搞定啦,分享一下~

xml sel -t -m "//INSTANCE" -s A:N:- "PROPERTY[@NAME='FileSize']" -v "concat(PROPERTY[@NAME='FileSize']/VALUE,',',PROPERTY[@NAME='Name']/VALUE)" -n myxml.xml


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
54.688ms