Parsing XPath Expressions

Is there a Java API that parses XPath expressions and produces the resultant XPath tree in memory?
For example the xpath expression: /a/b[c/d]/e/f
will produce a tree with "a" as the root node, "b" as a sub-node, "c" and "e" as subnodes of "b" and so on.
I don't want one that is to be evaluate against and XML document. I just want the XPath Expression tree to be build in memory.
Thanks

hi,
look at javacc, a compiler very popular, with many examples.
Raymond

Similar Messages

  • Using jaxen to parse xpath expressions

    Hi,
    I want to parse this XPath expression with jaxen: +$X//employee[@id=0529]/salary+
    after parsing i got this: +$X/descendant-or-self::node()/child::employee[(attribute::id = 529.0)]/child::salary+
    Jaxen doesn't parse +//employee+ as I expected.
    Is descendant-or-self::node()/child::employee equivalent to descendant-or-self::employee ?
    Edited by: basti on Oct 28, 2007 2:02 PM

    If I had to choose whether I think Jaxen interprets the XPath specs correctly or whether you do, I would choose Jaxen. But if you don't think so, wouldn't it be better to ask questions about Jaxen on the Jaxen mailing list?

  • [Error ORABPEL-10039]: invalid xpath expression  - array processing

    hi,
    I am trying to process multiple xml elements
    <assign name="setinsideattributes">
    <copy>
    <from expression="ora:getElement('Receive_1_Read_InputVariable','BILL','/ns2:BILL/ns2:CMS1500['bpws:getVariableData('iterator')']/ns2:HEADER/ns2:SSN')"/>
    <to variable="ssn"/>
    </copy>
    </assign>
    where iterator is a index variable .
    I am getting into this error .
    Error(48):
    [Error ORABPEL-10039]: invalid xpath expression
    [Description]: in line 48 of "D:\OraBPELPM_1\integration\jdev\jdev\mywork\may10-workspace\multixm-catch\multixm-catch.bpel", xpath expression "ora:getElement('Receive_1_Read_InputVariable','BILL','/ns2:BILL/ns2:CMS1500['bpws:getVariableData('iterator')']/ns2:HEADER/ns2:SSN')" specified in <from> is not valid, because XPath query syntax error.
    Syntax error while parsing xpath expression "ora:getElement('Receive_1_Read_InputVariable','BILL','/ns2:BILL/ns2:CMS1500['bpws:getVariableData('iterator')']/ns2:HEADER/ns2:SSN')", at position "77" the exception is Expected: ).
    Please verify the xpath query "ora:getElement('Receive_1_Read_InputVariable','BILL','/ns2:BILL/ns2:CMS1500['bpws:getVariableData('iterator')']/ns2:HEADER/ns2:SSN')" which is defined in BPEL process.
    [Potential fix]: Please make sure the expression is valid.
    any information on how to fix this .
    thanks in advance

    check out this note here
    http://clemensblog.blogspot.com/2006/03/bpel-looping-over-arrays-collections.html
    hth clemens

  • ORABPEL-09503 Invalid xpath expression in a CASE expression

    Hi I have the following case statement in my BPEL process -
    <switch name="checkAuthenticateResult">
    <case condition="upper-case(string(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_RETURN_STATUS')))='S' AND upper-case(string(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_TKT_VALID')bpws:getVariableData('isAuthenticCaller'))) = 'T'">
    <bpelx:annotation>
    <bpelx:pattern>authenticatePass
    </bpelx:pattern>
    </bpelx:annotation>
    <assign name="assignTktOutput">
    <copy>
    <from expression="boolean(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_TKT_VALID')='T')"/>
    <to variable="outputVariable" part="payload" query="/client:WshSendTxnToOtmServiceProcessResponse/client:result/ns2:authenticated"/>
    </copy>
    </assign>
    </case>
    <otherwise>
    <throw name="throwAuthenticateFail" faultVariable="g_faultVariable" faultName="faultError"/>
    </otherwise>
    </switch>
    When I run my process in 10.1.2, it works fine, but when I run it in 10.1.3.1, it errors out with the following error -
    <Faulthttp://schemas.xmlsoap.org/soap/envelope/>
    <faultcode>env:Server</faultcode>
    <faultstring>ORABPEL-09503 Invalid xpath expression. Error while parsing xpath expression "upper-case(string(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_RETURN_STATUS')))='S' AND upper-case(string(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_TKT_VALID')bpws:getVariableData('isAuthenticCaller'))) = 'T'", the reason is Unknown expression at EOF: upper-case(string(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_RETURN_STATUS')))='S' AND upper-case(string(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_TKT_VALID')bpws:getVariableData('isAuthenticCaller'))) = 'T'..
    Please verify the xpath query "upper-case(string(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_RETURN_STATUS')))='S' AND upper-case(string(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_TKT_VALID')bpws:getVariableData('isAuthenticCaller'))) = 'T'" which is defined in BPEL process.
    </faultstring><faultactor></faultactor></env:Fault></env:Body></env:Envelope>
    Do you think there was a bug in the expression that has surfaced due to some additional validations in 10.1.3.1 or am I missing something here?
    Thanks a lot for your help.
    Thanks.
    RV

    AND upper-case(string(bpws:getVariableData('g_InvokeAuthenticateTicketOutput','OutputParameters','/ns13:OutputParameters/X_TKT_VALID')bpws:getVariableData('isAuthenticCaller'))) = 'T'"
    what is this bold part about? this looks wrong to me..
    /clemens

  • Concat Operation failing.[Error ORABPEL-10039]: invalid xpath expression

    Hi ,
    I am trying to concat two values which are as mentioned below
    concat(bpws:getVariableData('paramsVar','/ns7:parameters/ns7:item[ns7:name='ContractNumber']/ns7:value'),bpws:getVariableData('AccumilateEmail','/ns1:AccumilatePLAContracts/ns1:AccumilatePLAType[$PLACount]/ns1:ContractInfoType[$ContractInfoTypeCount]/ns1:ContractNumber'))
    to /ns7:parameters/ns7:item[ns7:name='ContractNumber']/ns7:value (which is same as first parameter of concat operation)
    the error is [Error ORABPEL-10039]: invalid xpath expression
    [Description]: in line 681 of "C:\Users\varsha.tm\Desktop\InitiateMaintainContractRolesEmail\bpel\InitiateMaintainContractRolesEmail.bpel", xpath expression "concat(bpws:getVariableData('paramsVar','/ns7:parameters/ns7:item[ns7:name='ContractNumber']/ns7:value'),bpws:getVariableData('Ac
    cumilateEmail','/ns1:AccumilatePLAContracts/ns1:AccumilatePLAType[$PLACount]/ns1:ContractInfoType[$ContractInfoTypeCount]/ns1:ContractNumber'))" specified in <from> is not valid, because XPath query syntax error.
    Syntax error while parsing xpath expression "concat(bpws:getVariableData('paramsVar','/ns7:parameters/ns7:item[ns7:name='ContractNumber']/ns7:value'),bpws:getVariableData('AccumilateEmail','/ns1:AccumilatePLAContracts/ns1:AccumilatePLAType[$PLACount]/ns1:ContractInfoType[$ContractInfoTyp
    eCount]/ns1:ContractNumber'))", at position "76" the exception is Expected: ).
    Please verify the xpath query "concat(bpws:getVariableData('paramsVar','/ns7:parameters/ns7:item[ns7:name='ContractNumber']/ns7:value'),bpws:getVariableData('AccumilateEmail','/ns1:AccumilatePLAContracts/ns1:AccumilatePLAType[$PLACount]/ns1:ContractInfoType[$ContractInfoTypeCount]/ns1:Co.....
    I also tried converting both the variables of concat to string and then giving to concat operation. please let me know what could be the possible way to do this

    Hi,
    try storing the values of the below into a separate variables var1,var2 and then use concat(bpws:getVariableData('var1'),bpws:getVariableData(var2))....also try using the predicate[] without
    bpws:getVariableData for the below variables...for this in the assign activity create copy operation window....u see the xpath text box and u can mention the predicate values there...some
    thing like */ns7:parameters/ns7:item[ns7:name='ContractNumber']/ns7:value* , *ns1:AccumilatePLAContracts/ns1:AccumilatePLAType[$PLACount]/ns1:ContractInfoType
    [$ContractInfoTypeCount]/ns1:ContractNumber* instead of the below values
    bpws:getVariableData('paramsVar','/ns7:parameters/ns7:item[ns7:name='ContractNumber']/ns7:value')
    bpws:getVariableData('AccumilateEmail','/ns1:AccumilatePLAContracts/ns1:AccumilatePLAType[$PLACount]/ns1:ContractInfoType[$ContractInfoTypeCount]/ns1:ContractNumber')

  • XPath Expressions

    Hi,
    I am trying to select a particular node in a loaded DOM tree based on XPATH expressions. Rightnow We are using Xerces parser.
    Can anyone throw some light on this? i.e. Standard way of implementing this?
    Thanks in anticipation.
    With Regards
    K.RajeshKannan.

    Xpath expression is similiar like SQL queries.I don't think you could standardize the way ( if your queries is simple ).Another thing is Xerces does not support XPath.Try Xalan instead.

  • Comparing xpath expressions

    I would like to be able to compare two xpath expressions and evaluate whether their result CAN have nodes in common.
    For example:
    expression 1: /ItemData[@ItemOID='A']
    expression 2: /ItemData[@ItemOID='B']
    would need to evaluate to 'false'
    Other example:
    expression 1: /ItemData[@ItemOID='A']
    expression 2: /ItemData[@ItemOID='B or @ItemOID='A']
    would need to evaluate to 'true'
    Other example:
    expression 1: /ItemData[@ItemOID='A']
    expression 2: /ItemData[not(@ItemOID='B')]
    would need to evaluate to 'true'
    Other example:
    expression 1: /ItemData[@ItemOID='A']
    expression 2: /ItemData[not(@ItemOID='A'][not(@ItemOID='B']
    would need to evaluate to 'false'
    P.S. Sorry if the Xpath expressions do not show up 100% correctly in the above snippets - the editor is doing crazy ...
    I would like to do such an evaluation without actually having an XML document (!).
    Is this possible?
    Did someone ever write a class for doing so ?
    Many thanks
    Jozef

    XML4Pharma wrote:
    Is this possible?As phrased probably. You would need to create a xpath parser then compare the parse trees for expression equivalency.
    You might be able to find a xpath parser. The other part you would need to create yourself.

  • XPath expression for fetching element names & attributes

    Hi out there!
    I�m trying to get a result set out of a xml schema, using XPath. The problem is, that any expression gets just a whole node set back, as it seems. The result I�d like to get would be the following. Imagine I got a schema like this:
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:r="http://recipes.org"
    targetNamespace="http://recipes.org"
    elementFormDefault="qualified">
    <element name="recipe">
    <complexType>
    <sequence>
    <element name="title" type="string"/>
    <element ref="r:ingredient" minOccurs="0" maxOccurs="unbounded"/>
    <element ref="r:preparation"/>
    <element name="comment" minOccurs="0" type="string"/>
    <element name="nutrition">
    <complexType>
    <attribute name="protein" type="r:nonNegativeDecimal" use="required"/>
    <attribute name="carbohydrates" type="r:nonNegativeDecimal" use="required"/>
    <attribute name="fat" type="r:nonNegativeDecimal" use="required"/>
    <attribute name="calories" type="r:nonNegativeDecimal" use="required"/>
    <attribute name="alcohol" type="r:nonNegativeDecimal" use="optional"/>
    </complexType>
    </element>
    </sequence>
    </complexType>
    </element>
    </schema>
    Now, when I`m refering to the element <attribute name="protein" type="r:nonNegativeDecimal" use="required"/>, I would like to get all ancestors of it, which is not a big issue at all, but i`d just like to get their names and attributes, if they have some. So the result should be something like:
    <element name="recipe">
    <complexType>
    <sequence>
    <element name="nutrition">
    <complexType>
    </complexType>
    </element>
    </sequence>
    </complexType>
    </element>
    Any ideas anybody?
    Thanks in advance, Jens

    Well, I would use the org.apache.xpath.XPathAPI class and parse the input XML into a DOM document., and then utilize the single xpath expression //attribute[@name=protein]/ancestor::* to recover all ancestors (in a directal-tree-traversal order) of any node called "attribute" and with attr "name=protein" .
    Could it be?

  • How to evaluate dynamic XPath expression in BPEL?

    I have an xml file where I keep many settings for my BPEL process. At runtime, I read the file and I want to select values from it based on values in the process payload.
    For example, imagine that the process payload is an order:
    <order>
    <header>
    <id/>
    <customer_id/>
    <team_id/>
    </header>
    <items>
    <item>
    <id/>
    <sku/>
    <price/>
    <quantity/>
    </item>
    </items>
    </order>
    Now, in my xml settings file, I have a section where I keep a mapping of "team_id" and "assignment_group", so that for each team id, I can select the appropriate group to whom a task should be assigned. The relevant section of the settings file will look something like this:
    <assignment_groups>
    <group team_id='0923230'>invoice_approvers</group>
    <group team_id='3094303'>order_approvers</group>
    <group team_id='3434355'>shipping_approvers</group>
    </assignment_groups>
    So, imagine I get an order input to my process where the team_id is '3094303'. Now I have to lookup the correct assignment group in my settings file.
    So, I construct the dynamic XPath expression
    /settings/assignment_groups/group[@team_id=3094303]
    I know that this would evaluate to "order_approvers". However, even though I have the XPath expression in a BPEL variable, and I have my settings file as a BPEL variable also, I don't know how to execute the XPath expression against the settings BPEL variable to retrieve the correct value.
    Any ideas appreciated.
    Thanks,
    Jack

    James:
    Thank you for the response. Incidentally, this is the very same document and section that I have been looking at for guidance. Specifically, the section titled "Dynamically indexing by Constructing an XPath at Run Time" on page 12-13.
    I tried to do something similar to the example at the top of page 13:
    <variable name="iterator" type="xsd:integer"/>
    <assign>
    <copy>
    <from expression="concat('/invoice/line-item[',bpws:getVariableData('iterator'), ']/line-total')"/>
    <to variable="xpath"/>
    </copy>
    <copy>
    <from expression="bpws:getVariableData('input', 'payload',bpws:getVariableData('xpath')) + ..."/>
    </copy>
    </assign>
    I am able to achieve the first copy operation to get my dynamic XPath into a BPEL variable and that's fairly straightforward. But I am unable to get the second copy to work. Specifically, I am not sure what to put in the second argument of the bpws:getVariableData function. I have tried many different combinations, but when I try to compile my program, I get the following compilation error:
    Error:
    [Error ORABPEL-10902]: compilation failed
    [Description]: in "C:\code\TrainingWS\SampleGetSettings\bpel\SampleGetSettings.bpel", XML parsing failed because "org.collaxa.thirdparty.jaxen.expr.DefaultFunctionCallExpr".
    [Potential fix]: n/a.
    Thanks,
    Jack

  • Nested XPath expressions

    Hello,
    I am using jsp to read an xml file, then build a table from the contents. My xml looks like this:
    <document>
         <first> Text of First tag
                 <second> Text of second tag
                      <inner> Text of inner tag</inner>
                      <inner> Text of inner tag</inner>
                 </second>
         </first>
         <first> Text of First tag
                 <second> Text of second tag
                     <inner> Text of inner tag</inner>
                     <inner> Text of inner tag</inner>
                 </second>
         </first>
    </document>I am using the standard tag library to iterate over the nodes of type <first>. My problem is that when I get to each <first> node, I want to iterate over each <inner> node, but I don't know how to reference them with XPath. Here is a snippet of my jsp:
            <c:import var="xml" url="test2.xml"/>
         <x:parse varDom="dom" xml="${xml}"/>
            <x:forEach var="First" select="$dom/document/first">     // iterates over each <first> tage
              <x:set var="Second"      select="string($First/second)" />     // only one second tag per first tag
              <x:forEach var="inner" select="$Second/inner" >          // now I want to loop over all the <inner> tags
                         // process inner tags here
              </x:forEach>
            </x:forEach>I can't figure out how to access the inner tags with xpath. I can access the "Second" variable, but when I try to go into the second loop, I can't get the text of the <inner> tag. Any suggestions?

    Good question. I looked at the documentation for the x:forEach element, and it says that it sets the context node to each element of the iteration. So, inside your x:forEach element you can assume that the context node is a first element from your document. The XPath expression to find your inner elements relative to that context node is "inner/second". So:<x:forEach var="inner" select="second/inner" >

  • Xpath expression don't work

    i need to select two "sect" by idtry {
                // parse the XML as a W3C Document
                DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
                Document doc = builder.parse(new File("book1.xml"));
                XPath xpath = XPathFactory.newInstance().newXPath();
                String expression = "//chapter/sect[@id='secC'] | //chatpter/sect[@id='secA']"; //select two attributes (this don't works, why?)
                // obtain the element as a node.
                Node node = (Node)xpath.evaluate(expression, doc, XPathConstants.NODE);but using the same Xpath expression on xsl the expressions works
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:template match="/">
            <xsl:copy-of select="//chapter/sect[@id='secB']| //chapter/sect[@id='secC']"/> 
        </xsl:template>
    </xsl:stylesheet>may xml file <chapter id="chapter1">
            <sect id="secA">
                    <para id="a1">texto a1.</para>
                    <para id="a2">texto a2.</para>
                    <para id="a3">texto a3.</para>
            </sect>
            <sect id="secB">
                    <para id="b1">texto b1.</para>
                    <para id="b2">texto b2.</para>
                    <para id="b3">texto b3.</para>
            </sect>
    <sect id="secC">
                    <para id="c1">texto b1.</para>
                    <para id="c2">texto b2.</para>
                    <para id="c3">texto b3.</para>
            </sect>
    </chapter>can anyone help?

    The result of the query consists of two nodes. If you want to access both of them, use the NodeList type in place of the Node type:NodeList nodeList = (NodeList)xpath.evaluate(expression, doc, XPathConstants.NODESET);

  • XPath expression for each node name

    <DATABASE>
       <TITLE>
          <LANGUAGES>SGML<LANGUAGES>
       <TITLE>
    </DATABASE>Is there a direct way of retrieving xpath expression for each node name other than iterating through each node and identifying the parent node.
    Ex:
    DATABASE
    DATABASE/TITLE
    DATABASE/TITLE/LANGUAGES

    If you set an element ID using the DOM parser you can then look it up using the ID.
    private void setElementIDNode(String tag, String IDAttribute){
            NodeList nodes = doc.getElementsByTagNameNS(docNS, tag);
            for (int i = 0; i < nodes.getLength(); i++){
                Element node = (Element)nodes.item(i);
                node.setIdAttribute(IDAttribute, true);
    Element e  = doc.getElementById(elementID);But at some point you still have to iterate through the document. I believe XML Pull Parsers are a little different but I don't have experience with them.

  • XPath expression help

    I have an xml structure (see XML at bottom) which i want to traverse using the xpath (PL/SQL) utility.
    I have written code that mainly uses xpath.selectNodes(...,...)
    I can select the customers easily by using
    xpath.selectNodes(...,'//customers_item')
    FOR i IN 1..NVL(xmldom.getlength(lov_customers),0) LOOP
    END LOOP;
    but what I want is to get the products for EACH customer.
    What I have inside the FOR LOOP is this
    xpath.selectNodes(ip_xml_dom, '//customers_item/products/product');
    but this gives me all products for all customers not the current customer.
    I know if that if I put the correct sytax in the XPath expression I can get what I want?
    I can't work this out, can anyone help
    <GetProfileResponse>
    <Return>
    <site>
    <customers>
    <customers_item>
    <id>1<id>
    <products>
    <product>
    <prodid>100</prodid>
    </product>
    <product>
    <prodid>101</prodid>
    </product>
    </products>
    </customers_item>
    <customers_item>
    <id>2<id>
    <products>
    <product>
    <prodid>102</prodid>
    </product>
    <product>
    <prodid>103</prodid>
    </product>
    </products>
    </customers_item>
    </customers>
    </site>
    </Return>
    </GetProfileResponse>
    null

    The following code works fine for me using PLSQL XML Parser 1.0.2 in Oracle8i 8.1.6 and produces the output:
    Customer id:1
    --> Prod id:100
    --> Prod id:101
    Customer id:2
    --> Prod id:102
    --> Prod id:103
    SET SERVEROUTPUT ON
    DECLARE
    xml VARCHAR2(2000) :=
    '<GetProfileResponse>
    <Return>
    <site>
    <customers>
    <customers_item>
    <id>1</id>
    <products>
    <product>
    <prodid>100</prodid>
    </product>
    <product>
    <prodid>101</prodid>
    </product>
    </products>
    </customers_item>
    <customers_item>
    <id>2</id>
    <products>
    <product>
    <prodid>102</prodid>
    </product>
    <product>
    <prodid>103</prodid>
    </product>
    </products>
    </customers_item>
    </customers>
    </site>
    </Return>
    </GetProfileResponse>';
    p xmlparser.parser;
    d xmldom.DOMDocument;
    n xmldom.DOMNode;
    nl_outer xmldom.DOMNodeList;
    ct_outer NUMBER;
    nl_inner xmldom.DOMNodeList;
    ct_inner NUMBER;
    xpCusts VARCHAR2(80);
    xpProds VARCHAR2(80);
    BEGIN
    xpCusts := '/GetProfileResponse/Return/site/customers/customers_item';
    xpProds := './/products/product';
    p := xmlparser.newparser();
    xmlparser.parseBuffer(p,xml);
    d := xmlparser.getDocument(p);
    n := xmldom.makeNode(d);
    nl_outer := xslprocessor.selectNodes(n,xpCusts);
    ct_outer := xmldom.getLength(nl_outer);
    FOR i IN 0..ct_outer-1 LOOP
    n := xmldom.item(nl_outer,i);
    dbms_output.put_line('Customer id:'&#0124; &#0124;xslprocessor.valueOf(n,'id'));
    nl_inner := xslprocessor.selectNodes(n,xpProds);
    ct_inner := xmldom.getLength(nl_outer);
    FOR j IN 0..ct_inner-1 LOOP
    n := xmldom.item(nl_inner,j);
    dbms_output.put_line('--> Prod id:'&#0124; &#0124;xslprocessor.valueOf(n,'prodid'));
    END LOOP;
    END LOOP;
    xmldom.freeDocument(d);
    xmlparser.freeparser(p);
    END;
    /

  • OAGIS Get XPath Expression

    We are using the OAGis schema and a client is sending us data in an expression instead of in the actual schema location using the <Get> portion of the schema.
    <Get uniqueIndicator="true">
          <Expression expressionLanguage="XPath">//Credit/FirstName[.="John"]</Expression>
          <Expression expressionLanguage="XPath">//Credit/LastName[.="Smith"]</Expression>
    </Get>What is the best way in BPEL to evaluate this xpath expression to set the FirstName to John and LastName to Smith? We are currently using a transform to parse each expression using XSLT into our database schema. It's not very elegant because it uses an if statement to check the path then has to parse out between the quotes then passes the value to the new var/schema.
    It seems like there should be a way to evaluate the XPath and set the path to the noted string.
    Thanks,

    This Example works fine for arrays that are part of a WSDL message.
    But in 10.1.3.1 this does not work with a array that is part of an XSD declaration
    for Example XSD snippet
    <xsd:element name="itemList">
              <xsd:complexType>
                   <xsd:sequence>
                        <xsd:element maxOccurs="unbounded" minOccurs="1" ref="tns:Item" />
                   </xsd:sequence>
              </xsd:complexType>
         </xsd:element>
    using the following in assign statement
    <copy>
    <from expression="concat('/ns9:itemList/ns9:Item[',string(bpws:getVariableData('index')),']')"/>
    <to variable="idxXpath"/>
    </copy>
    <copy>
    <from expression="bpws:getVariableData('OutputItemList',bpws:getVariableData('idxXpath'))"/>
    <to variable="idx_item"/>
    </copy>
    gives a compiler error that is
    Error(176):
    [Error ORABPEL-10085]: invalid argument
    [Description]: in line 176 of "D:\OnlineShopping_1\bpel\OnlineShopping.bpel", the second argument "bpws:getVariableData("idxXpath")" for getVariableData is not a literal expression.
    [Potential fix]: Please correct the second argument, you might need to escape using single quote or " to make it literal.
    Can anyone site the reason for the same or a possible solution?
    Message was edited by:
    user607972

  • Getting Invalid XPath expression

    Hi,
    I am parsing a XML document and reading a node with <xtags:valueOf .. select="product_name"/>. The value of product_name is :
    <product_name>SJE6 2004Q1, 1 RTU ESD, All platforms, 1 Year</product_name> , but I am getting the following exception :
    org.dom4j.InvalidXPathException: Invalid XPath expression: SJE6 2004Q1, 1 RTU ESD, All platforms, 1 Year Unexpected '2004'
    at org.dom4j.xpath.DefaultXPath.parse(DefaultXPath.java:316)
    at org.dom4j.xpath.DefaultXPath.<init>(DefaultXPath.java:63)
    at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:182)
    at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:198)
    at org.apache.taglibs.xtags.xpath.AbstractTag.createXPath(AbstractTag.java:195)
    at org.apache.taglibs.xtags.xpath.VariableTag.setSelect(VariableTag.java:143)
    I tried with <xtags:copyOf select=.../node() and text()/> but still getting the same exception. Not sure why its failing on 2004? Help!
    Thanks,
    -Ashish

    The problem was not in the <xtags:valueOf> but in the following expression :
    <xtags:variable id="lName" select="<%= product_name %>"/>
    where I wasassigning the value of <product_name> to a String (java) variable defined. But this will be another question : why is <xtags:variable> failing?

Maybe you are looking for