Hi Dirk, Thanks for your reply. Yes xml rule makes difference. It returns the xml elements as in the xml structure from top to bottom. But evaluateXPathExpression returns the xml elements as last-in last order. Here is the code I'm trying now. It returns the last inserted elements in the structure as first and so on. IDocument *doc = Utils<ILayoutUIUtils>()->GetFrontDocument(); UIDRef docref = ::GetUIDRef(doc); IDataBase *db = docref.GetDataBase(); K2Vector<WideString> xPaths; xPaths.push_back(WideString("//qlink[@ref-type]")); InterfacePtr<IIDXMLElement> rootElement(Utils<IXMLUtils>()->QueryRootElement(db)); XMLReference root(Utils<IXMLUtils>()->GetImportedRootXMLReference(doc)); HitMatches matches; Utils<IXMLParserUtils>()->EvaluateXPathsForElement(xPaths, rootElement, matches, 0); std::map<XMLReference, K2Vector<int32>>::reverse_iterator iterator = matches.rbegin(); std::map<XMLReference, K2Vector<int32>>::reverse_iterator iterator_end = matches.rend(); while(iterator != iterator_end) { WideString wstr; XMLReference xmlref = iterator->first; InterfacePtr<IIDXMLElement> element(xmlref.Instantiate()); XMLContentIterator iter(element->begin()); for(; iter != element->end(); iter++) { InDesign::TextRange range = *iter; if(range.Length()>0) { do { InterfacePtr<ITextModel> textModel(range.QueryModel()); TextIterator begin(textModel, range.Start()); TextIterator end(textModel, range.End()); for (TextIterator iterr = begin; iterr != end; iterr++) { const UTF32TextChar characterCode = *iterr; wstr.Append(characterCode); } } while(false); } } for(int i=0;i<element->GetChildCount();i++) { XMLReference childRef = element->GetNthChild(i); InterfacePtr<IIDXMLElement> childelement(childRef.Instantiate()); XMLContentIterator iter(childelement->begin()); for(; iter != childelement->end(); iter++) { InDesign::TextRange range = *iter; if(range.Length()>0) { do { InterfacePtr<ITextModel> textModel(range.QueryModel()); TextIterator begin(textModel, range.Start()); TextIterator end(textModel, range.End()); for (TextIterator iterr = begin; iterr != end; iterr++) { const UTF32TextChar characterCode = *iterr; wstr.Append(characterCode); } } while(false); } } } PMString str(wstr); CAlert::InformationAlert(str); iterator++; } Regards, Chinna
... View more