Issues with Using count() and normalize-space() Functions in XPath with XMLutils in Igor Pro

I am parsing an XML file using [XMLutils](https://github.com/IP-XOP/XMLutils) in Igor Pro, but I am encountering issues with the `count()` function, which is used to count nodes in a node-set, and the `normalize-space()` function. These functions do not behave as expected in my code. I suspect that I might be using them incorrectly.

I have verified that the XPath expressions work as expected in `xmllint`, as shown below:

$ xmllint --xpath "/modeling/kpoints/varray[@name='kpointlist']/v" test.xml
<v>       0.00000000       0.00000000       0.00000000 </v>
<v>       0.05000000       0.00000000       0.05000000 </v>
<v>       0.10000000       0.00000000       0.10000000 </v>
<v>       0.15000000       0.00000000       0.15000000 </v>
<v>       0.20000000       0.00000000       0.20000000 </v>
<v>       0.25000000       0.00000000       0.25000000 </v>
<v>       0.30000000       0.00000000       0.30000000 </v>
<v>       0.35000000       0.00000000       0.35000000 </v>
<v>       0.40000000       0.00000000       0.40000000 </v>
<v>       0.45000000       0.00000000       0.45000000 </v>
<v>       0.50000000       0.00000000       0.50000000 </v>
<v>       0.50000000       0.00000000       0.50000000 </v>
<v>       0.50000000       0.02500000       0.52500000 </v>
<v>       0.50000000       0.05000000       0.55000000 </v>
<v>       0.50000000       0.07500000       0.57500000 </v>
<v>       0.50000000       0.10000000       0.60000000 </v>
<v>       0.50000000       0.12500000       0.62500000 </v>
<v>       0.50000000       0.15000000       0.65000000 </v>
<v>       0.50000000       0.17500000       0.67500000 </v>
<v>       0.50000000       0.20000000       0.70000000 </v>
$ xmllint --xpath "count(/modeling/kpoints/varray[@name='kpointlist']/v)" test.xml
20
$ xmllint --xpath "normalize-space(/modeling/kpoints/varray[@name='kpointlist']/v[1])" test.xml
0.00000000 0.00000000 0.00000000

However, when I try using these functions in Igor Pro with XMLutils, I get no results, even though there are no errors. Below is the relevant code:

Function parseXmlDemo1()
    String xmlFile
    String XPathStr
    String nameSpaceStr
    String delimiterStr
    Variable fileID
 
    xmlFile="C:test.xml"
    fileID = xmlopenfile(xmlFile)
    
    nameSpaceStr = ""
    delimiterStr = "\r\n"
 
    // It works as expected
    XPathStr = "/modeling/kpoints/varray[@name='kpointlist']/v"
    print XMLstrFmXpath(fileID,XPathStr,nameSpaceStr,"")
    XMLwaveFmXpath(fileID,XPathStr,nameSpaceStr,delimiterStr)  // ==> M_xmlcontent, W_xmlcontentnodes
 
    xmlclosefile(fileID,0)
End
 
Function parseXmlDemo2()
    String xmlFile
    String XPathStr
    String nameSpaceStr
    String delimiterStr
    Variable fileID
 
    xmlFile="C:test.xml"
    fileID = xmlopenfile(xmlFile)
    
    nameSpaceStr = ""
    delimiterStr = "\r\n"
 
    // No erros but empty results
    XPathStr = "count(/modeling/kpoints/varray[@name='kpointlist']/v)"
    print XMLstrFmXpath(fileID,XPathStr,nameSpaceStr,"")  // nothing
    XMLwaveFmXpath(fileID,XPathStr,nameSpaceStr,delimiterStr)  // nothing
    
    xmlclosefile(fileID,0)
End
 
Function parseXmlDemo3()
    String xmlFile
    String XPathStr
    String nameSpaceStr
    String delimiterStr
    Variable fileID
 
    xmlFile="C:test.xml"
    fileID = xmlopenfile(xmlFile)
    
    nameSpaceStr = ""
    delimiterStr = "\r\n"
 
    // No erros but empty results
    XPathStr = "normalize-space(/modeling/kpoints/varray[@name='kpointlist']/v[1])"
    print XMLstrFmXpath(fileID,XPathStr,nameSpaceStr,"")  // nothing
    XMLwaveFmXpath(fileID,XPathStr,nameSpaceStr,delimiterStr)  // nothing
    
    xmlclosefile(fileID,0)
End

I suspect that the functions `count()` and `normalize-space()` should work in Igor Pro using XMLutils, as both `xmllint` and XMLutils will return errors if an unknown function is used (see below):

$ xmllint --xpath "Unknown(/modeling/kpoints/varray[@name='kpointlist']/v)" test.xml
xmlXPathCompOpEval: function Unknown not found
XPath error : Unregistered function
XPath evaluation failure

 

Function parseXmlDemo4()
    String xmlFile
    String XPathStr
    String nameSpaceStr
    String delimiterStr
    Variable fileID
 
    xmlFile="C:test.xml"
    fileID = xmlopenfile(xmlFile)
    
    nameSpaceStr = ""
    delimiterStr = "\r\n"
 
    // Define an invalid XPath expression
    // Note: The function "Unknown" does not exist, so this will result in an error
    // Expected error message: "XMLutils: Failure with XPath expression"
        
    XPathStr = "Unknown(/modeling/kpoints/varray[@name='kpointlist']/v[1])"
    print XMLstrFmXpath(fileID,XPathStr,nameSpaceStr,"")  // nothing
    XMLwaveFmXpath(fileID,XPathStr,nameSpaceStr,delimiterStr)  // nothing
    
    xmlclosefile(fileID,0)
End

Has anyone else experienced similar issues or know how to make the `count()` and `normalize-space()` functions work correctly with XMLutils in Igor Pro? A simplified XML file, used to demonstrate this issue, is attached.

A simplified XML file, used to demonstrate this issue (753 bytes)

I don't think that'll work. You should be able to get a wave of all the successful wavefmxpath entries, then work out the length of that.