Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 644
  • Last Modified:

XPath -count no. of specific tag occurences

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
inquisitive123
Asked:
inquisitive123
2 Solutions
 
PraesidiumCommented:
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
 
rdcproCommented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now