How I can query this xml file use XPATH expression?

L

lxmxn

<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>

The XML file is above, how can I query the informations (sorted by
'FileSize') into this format:
0,e:\tool\temp.xml
9,e:\tool\run.bat
220,247296,e:\tool\i.txt
247296,e:\tool\gawk.exe

I type the following command in CMD, but it doesn't work well.
xml sel -t -m "//PROPERTY[1]" -v "concat(VALUE,'')" -o "," -m "//
PROPERTY[2]" -v "concat(VALUE,'')" -n myxml.xml
 
M

Martin Honnen

lxmxn said:
The XML file is above, how can I query the informations (sorted by
'FileSize') into this format:
0,e:\tool\temp.xml
9,e:\tool\run.bat
220,247296,e:\tool\i.txt
247296,e:\tool\gawk.exe

I don't think a single XPath expression suffices, what you can do is
write an XSLT stylesheet that sorts and extracts the data:

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

<xsl:eek:utput method="text"/>

<xsl:template match="CIM">
<xsl:apply-templates select="INSTANCE">
<xsl:sort select="PROPERTY[@NAME = 'FileSize']/VALUE"
data-type="number"/>
</xsl:apply-templates>
</xsl:template>

<xsl:template match="INSTANCE">
<xsl:value-of select="concat(PROPERTY[@NAME = 'FileSize']/VALUE,
',', PROPERTY[@NAME = 'Name']/VALUE, '
')"/>
</xsl:template>

</xsl:stylesheet>
 
G

ggrothendieck

<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>

The XML file is above, how can I query the informations (sorted by
'FileSize') into this format:
0,e:\tool\temp.xml
9,e:\tool\run.bat
220,247296,e:\tool\i.txt
247296,e:\tool\gawk.exe

I type the following command in CMD, but it doesn't work well.
xml sel -t -m "//PROPERTY[1]" -v "concat(VALUE,'')" -o "," -m "//
PROPERTY[2]" -v "concat(VALUE,'')" -n myxml.xml

Try matching on INSTANCE rather than PROPERTY:

xml sel -t -m //INSTANCE -v PROPERTY[1]/VALUE -o , -v PROPERTY[2]/
VALUE -n myxml.xml
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top