Solved

XPath -count no. of specific tag occurences

Posted on 2004-09-25
2
637 Views
Last Modified: 2012-05-05
I am using libxml2 library in C to parse an xml document.  I am trying to count the no. of tags <Book>.  I tried using
"count(//Book)".  But I want the number rather than the node-set.   Is there an xpath expression to do this?

<?xml version="1.0" ?>
- <Book List>
- <Book>
  <Name>book1</Name>
  <Author>author1</Author>
  <Price>15.00</Price>  
  </Book>
- <Book>
  <Name>book2</Name>
  <Author>author2</Author>
  <Price>10.00</Price>  
  </Book>
  </Book List>

Thanks
0
Comment
Question by:inquisitive123
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 6

Assisted Solution

by:Praesidium
Praesidium earned 250 total points
ID: 12153891
XmlNode[] full = new XmlNode[full.Count];

Seems like this should work for you, count the number of nodes in your node list...  Why do you want the number of nodes, because depending on what you are doing, I may be able to offer you a better alternative...
0
 
LVL 26

Accepted Solution

by:
rdcpro earned 250 total points
ID: 12155402
Well, count(//Book) *is* an XPath eppression that does this.  Well, rather it's an XSLT expression that uses XPath.  But, I don't think there are any methods in Libxml that don't return nodesets...That is, in XSLT such an XPath expression will return a number but using DOM methods, it's not allowed.  You can get the nodelist, then use the DOM length property--this is the standard way of doing it.  I'm not a C programmer, but in Python (using the XPath wrappers for libxml2):

import libxml2

doc = libxml2.parseFile("tst.xml")
ctxt = doc.xpathNewContext()
res = ctxt.xpathEval("//book")
if len(res) != 2:
    print "XPath Query did not return the expected node set"
    sys.exit(1)
doc.freeDoc()
ctxt.xpathFreeContext()

Note that you must explicitly free both the document and the context.

Regards,
Mike Sharp
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The Problem How to write an Xquery that works like a SQL outer join, providing placeholders for absent data on the outer side?  I give a bit more background at the end. The situation expressed as relational data Let’s work through this.  I’ve …
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…

627 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question