Home | About | Sematext search-lucene.com search-hadoop.com
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB
 Search Hadoop and all its subprojects:

Switch to Threaded View
Pig >> mail # user >> Pig UDF: XPath expression evaluation issue


Copy link to this message
-
Pig UDF: XPath expression evaluation issue
Hi all,I have a UDF in Java that does some XML processing. My parser works fine. I am now adding some code to this UDF that uses XPath. However, my XPath expression always returns null. I wrote another standalone program that has the same path expression and same document as its input, I get correct results. However, my Pig UDF with same XPath expression and same i/p it retunes a null result. Please find relevant code snippet attached. Has anyone used XPath in UDFs. Also I saw mention of XPath with PiggyBan, but my 0.11 code does not have that in its contrib area. Does anyone has any experience with using that?
public parseXml (String xmlRecords){/* I have a sequence file so xmlRecords isn basically the xml file to parse */
 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true);  db = DocumentBuilderFactory.newInstance().newDocumentBuilder();InputSource is = new InputSource();is.setCharacterStream(new StringReader(xmlRecords));doc = db.parse(is);
// other codeā€¦.
} public String tokenIdToStringXPath (String tokenidstr)    {
 String querystr = "//lang:Token[@xml:id='" + tokenidstr + "']";
        Element tokenelem = null;        String resultingtokenstr = "Sameer";        StringBuilder resultstr = new StringBuilder();
        try            {

                XPathExpression expr = xPath.compile(querystr);                Object result = expr.evaluate(doc, XPathConstants.NODESET);                NodeList nodes = (NodeList) result;
                resultstr.append("Querystr: " + querystr);                resultstr.append(" ::Nodes: " + nodes.getLength());
}
The XPath expression after evaluation never
 //lang:Token[@xml:id='639'] ::Nodes: 0    
 
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB