It has been too long. Hopefully you have a working solution by now. But here
is the solution any way -
As David said, you gotta get to the text node of the element to get a value
XalanNode *node = theEvaluator1->selectSingleNode(
theDOMSupport,
theContextNode,
XalanDOMString(xpath).c_str(),
(*thePrefixResolver1));
cout<<"outputA is "<<node->getNodeValue()<<endl; //No value
cout<<"outputB is "<<node->getNodeName()<<endl;
XalanNode *child = node->getFirstChild();
// For a non-leaf node, this gives the child node or
whitespace(if any)
// For a leaf node, this gives the text node
if (child!=NULL) {
result =
string(convertXalanDOMString(child->getNodeValue()));
if (trim(result).length()>0) {
cout<<"got it "<<trim(result)<<endl;
} // No need to go further. You had a leaf node
else {
while (child!=0) {
if (child->getFirstChild()!=NULL) {
//This is NULL for whitespace as
the current node
cout<<"Value is
"<<child->getFirstChild()->getNodeValue()<<endl;
cout<<"output2 is
"<<child->getNodeName()<<endl;
}
child = child->getNextSibling();
}
}
}
Note: convertXalanDOMString is my custom function - you may ignore it.
This code snippet would give you values for "/bookstore/book[1]" and also
for "/bookstore/book[1]/author"
For your second question about year, you have to get a nodelist and then
iterate through it to get individual years. I do not know of any way for
xapth to give it directly.
Try the theEvaluator1->selectNodeList(....) Hopefully this helps.
Shalmi wrote:
>
>
> David Bertoni wrote:
>>
>> Paul Lalonde wrote:
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA1
>>>
>>> So now I'm further confused - I tried calling XalanNode::getChildren(),
>>> but recieved an XalanDOMException with value 9 = NOT_SUPPORTED_ERR.
>>> Clearly I'm asking for the wrong thing. What's the right thing?
>>>
>>
>> This is a deliberate limitation in Xalan-C's implementation, to save
>> memory. Because the processor never needs to see a list of the children,
>> only the iterative member functions are implemented. Try the following
>> code:
>>
>> XalanNode* child = node->getFirstChild();
>>
>> while(child != 0)
>> {
>> ...
>>
>> child = child->getNextSibling();
>> }
>>
>>
>> Dave
>>
>>
>
> Hi,
> Consider following XML
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <bookstore>
> <book category="CHILDREN">
> <title lang="en">Harry Potter</title>
> <author>J K. Rowling</author>
> <year>2005</year>
> <price>29.99</price>
> </book>
> <book category="WEB">
> <title lang="en">Learning XML</title>
> <author>Erik T. Ray</author>
> <year>2003</year>
> <price>39.95</price>
> </book>
> </bookstore>
>
> It has four text nodes/elment(?). So if i run "/bookstore/book[1]"
> getNodeValue() on this,what should i get?
> I did traversed through the node and print it,but in this case I get null
> string. The same piece of code works for "/bookstore/book/year".
> I mean if i have to print following output what would be the generic
> approach?
> 1. For "/bookstore/book[1]" i should get <book category="CHILDREN">
> <title lang="en">Harry Potter</title>
> <author>J K. Rowling</author>
> <year>2005</year>
> <price>29.99</price>
> </book>
>
> 2. For "/bookstore/book/year" i should get
> 2005
> 2003
>
> Thanks
> Shalmi
>
>
>
--
View this message in context:
http://www.nabble.com/Getting-at-the-value-in-an-XalanNode--tp6271680p15138243.html
Sent from the Xalan - C - Users mailing list archive at Nabble.com.