You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-users@xalan.apache.org by kamakshi <ka...@hcl.in> on 2006/11/02 07:22:24 UTC

how to evaluate a xpath ,that is the value for a node in the given xpath

hi,
<Select>
      <SearchFilter></SearchFilter>
      <Component>http://3gpp/ap/bs</Component>
      <GL>/Profile/Sub/App</GL>
 </Select>
This is my xml....
now i want to use an xpath to find the details of App using the GL
only............
i tried using the xpath:
Select/GL, 
but this returns only the value of GL as a string, is there any way of
evaluating the content of a node as xpath? can anybody help me out?
-- 
View this message in context: http://www.nabble.com/how-to-evaluate-a-xpath-%2Cthat-is-the-value-for-a-node-in-the-given-xpath-tf2557995.html#a7128425
Sent from the Xalan - C - Users mailing list archive at Nabble.com.


Re: how to evaluate a xpath ,that is the value for a node in the given xpath

Posted by kamakshi <ka...@hcl.in>.


David Bertoni wrote:
> 
> kamakshi wrote:
>> hi,
>> <Select>
>>       <SearchFilter></SearchFilter>
>>       <Component>http://3gpp/ap/bs</Component>
>>       <GL>/Profile/Sub/App</GL>
>>  </Select>
>> This is my xml....
>> now i want to use an xpath to find the details of App using the GL
>> only............
>> i tried using the xpath:
>> Select/GL, 
>> but this returns only the value of GL as a string, is there any way of
>> evaluating the content of a node as xpath? can anybody help me out?
> 
> Without more information about what you're doing, it's hard to say how you 
> should solve this problem.  If this is part of a stylesheet, you can use 
> the EXSLT function evaluate():
> 
> http://www.exslt.org/dyn/functions/evaluate/index.html
> 
> There is no way with standard XSLT to do dynamic evaluation of XPath 
> expressions within a stylesheet.
> 
> If you're writing code to do this work, you can use the XPathEvaluator 
> class to compile and evaluate the XPath expression.  There is a sample 
> application that illustrates how to use that class.
> 
> Dave
> 
> 
> 
i will describe about what i am doing in detail.....
Iam not using a stylesheet i am using a xml file testmodify.xml that
contains a dom tree, where one of the nodes values itself is an xpath
pointing to another node in the same dom tree.
<IS>
   <Select>
      <SearchFilter></SearchFilter>
      <Component>http://3gpp/gup/ns/comp/C_Sub/C_App</Component>
     
<GL>/IS/Profile/C_Subscription/C_AppP[AppProfileIdentifier="app1"]</GL>
  </Select>
  <Profile>
    <C_Subscription>
	    <C_AppP>
	      <AppProfileIdentifier>app1</AppProfileIdentifier>
	      <IUReference>sip:impu1</IUReference>
	      <SubRef>sub1</SubRef>
	     
<AppData><Acro>CLIP</Acro><Sub>true</Sub><ActivationOptions><SubscriberControlAllowed>true</SubscriberControlAllowed><Activation>true</Activation></ActivationOptions></AppData>
	    </C_AppP>
    </C_Subscription>
  </Profile>
</IS>
I am using a SimplaXPathAPI.cpp(sample file given in xalan) file to evaluate
the given xpath...
The code i am using is
	NodeRefList itemList;
					theEvaluator.selectNodeList(
								itemList, 
								theDOMSupport, 
								theContextNode,
								XalanDOMString(argv[3]).c_str(), 
								thePrefixResolver);

					const NodeRefList::size_type	theLength = itemList.getLength();

					if (theLength == 0)
					{
						cerr << endl
							 << "Warning: No nodes matched the location path \""
							 << argv[3]
							 << "\"."
							 << endl;
					}
					else
					{
						XALAN_USING_XALAN(XalanStdOutputStream)
						XALAN_USING_XALAN(XalanOutputStreamPrintWriter)
						XALAN_USING_XALAN(FormatterToXML)
						XALAN_USING_XALAN(FormatterTreeWalker)

						// OK, we're going to serialize the nodes that were
						// found.  We should really check to make sure the
						// root (document) has not been selected, since we
						// really can't serialize a node list with the root.
						XalanStdOutputStream			theStream(cout);
						XalanOutputStreamPrintWriter	thePrintWriter(theStream);

						FormatterToXML			theFormatter(thePrintWriter);
						FormatterTreeWalker		theWalker(theFormatter);

						// Don't write a header...
						theFormatter.setShouldWriteXMLHeader(false);

						// It's required that we do this...
						theFormatter.startDocument();

						// Traverse the subtree of the document rooted at
						// each node we've selected...
						for (NodeRefList::size_type i = 0; i < theLength; ++i)
						{
							const XalanNode* const	theNode = itemList.item(i);
							assert(theNode != 0);

							const XalanNode::NodeType	theNodeType =
								theNode->getNodeType();

							if (theNodeType == XalanNode::DOCUMENT_NODE)
							{
								cerr <<"Warning: The root was selected.  The root cannot be
serialized."<< endl;
							}
							else if (theNodeType == XalanNode::ATTRIBUTE_NODE)
							{
								cerr <<"Warning: An attribute or namespace node was selected. 
Attribute and namespace nodes cannot be serialized."<< endl;
							}
							else
							{
								theWalker.traverseSubtree(theNode);
							}
						}

						// It's required that we do this...
						theFormatter.endDocument();
					}
								
The xpath what i want to evaluate is ::
SimpleXPathAPI testmodify.xml / '/IS/Select/GL' where GL inturn should 
evaluate its xpath and final output should be AppP data..........
can u help me out with these details?

-- 
View this message in context: http://www.nabble.com/how-to-evaluate-a-xpath-%2Cthat-is-the-value-for-a-node-in-the-given-xpath-tf2557995.html#a7152117
Sent from the Xalan - C - Users mailing list archive at Nabble.com.


Re: how to evaluate a xpath ,that is the value for a node in the given xpath

Posted by David Bertoni <db...@apache.org>.
kamakshi wrote:
> hi,
> <Select>
>       <SearchFilter></SearchFilter>
>       <Component>http://3gpp/ap/bs</Component>
>       <GL>/Profile/Sub/App</GL>
>  </Select>
> This is my xml....
> now i want to use an xpath to find the details of App using the GL
> only............
> i tried using the xpath:
> Select/GL, 
> but this returns only the value of GL as a string, is there any way of
> evaluating the content of a node as xpath? can anybody help me out?

Without more information about what you're doing, it's hard to say how you 
should solve this problem.  If this is part of a stylesheet, you can use 
the EXSLT function evaluate():

http://www.exslt.org/dyn/functions/evaluate/index.html

There is no way with standard XSLT to do dynamic evaluation of XPath 
expressions within a stylesheet.

If you're writing code to do this work, you can use the XPathEvaluator 
class to compile and evaluate the XPath expression.  There is a sample 
application that illustrates how to use that class.

Dave