Hi Team,
I work on Yang RFC development. Yang RFC proposes an Xpath extension called 
current() as:
https://tools.ietf.org/html/rfc7950#section-10.1.1

10.1.1. current()
 node-set current() The current() function takes no input parameters and 
returns a node set with the initial context node as its only member.I have 
implemented this extension as shown below. This extension does seem to be 
working for simple Xpath expressions like: "current() > 0", but does not work 
when complex expressions are involved like: "../../interface[name = 
current()/../ifname]/address/ip" 
Could you guys let me know if this implementation is proper? Your help is 
highly appreciated.

/*
 * ext_current () -- Defines the Xpath extension current(),
 * defined by Yang RFC.
 *
 * From Yang RFC 7950:
 *
 * The current() function takes no input parameters and returns a node
 * set with the initial context node as its only member.
 */
static void
ext_current (xmlXPathParserContextPtr ctxt, int nargs)
{
    /*
     * This function takes 0 args.
     */
    if (nargs != 0) {
        return;
    }

    /* Push the current context node onto Xpath Stack */
    valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node));
}

/*
 * register_yang_xpath_extensions () -- Registers extensions defined by Yang
 * RFC. These extensions are implemented internally in Junos.
 */
static void
register_yang_xpath_extensions (xmlXPathContextPtr ctxt)
{
    int rc = 0;

    rc = xmlXPathRegisterFunc(ctxt, (const xmlChar *)"current",
                              ext_current);
    if (rc != 0)
        fprintf(stderr, "Error in registering current() func\n");
}

Regards,Ram   
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to