public object Evaluate(XslTransformProcessor p) { if (this.select != null) { object obj = p.Evaluate(this.select); if (obj is XPathNodeIterator) { ArrayList arrayList = new ArrayList(); XPathNodeIterator xpathNodeIterator = (XPathNodeIterator)obj; while (xpathNodeIterator.MoveNext()) { XPathNavigator xpathNavigator = xpathNodeIterator.Current; arrayList.Add(xpathNavigator.Clone()); } obj = new ListIterator(arrayList, p.XPathContext); } return(obj); } if (this.content != null) { DTMXPathDocumentWriter2 dtmxpathDocumentWriter = new DTMXPathDocumentWriter2(p.Root.NameTable, 200); Outputter newOutput = new GenericOutputter(dtmxpathDocumentWriter, p.Outputs, null, true); p.PushOutput(newOutput); if (p.CurrentNodeset.CurrentPosition == 0) { p.NodesetMoveNext(); } this.content.Evaluate(p); p.PopOutput(); return(dtmxpathDocumentWriter.CreateDocument().CreateNavigator()); } return(string.Empty); }
public XPathNavigator CreateNavigator(int nodeQuota, XmlSpace space) { if (nav_cache == null) { DTMXPathDocumentWriter2 pw = new DTMXPathDocumentWriter2(new NameTable(), nodeQuota); XmlDictionaryWriter w = XmlDictionaryWriter.CreateDictionaryWriter(pw); CreateMessage().WriteMessage(w); nav_cache = pw.CreateDocument().CreateNavigator(); } return(nav_cache.Clone()); }
public override object Evaluate(BaseIterator iter) { XsltCompiledContext ctx = iter.NamespaceManager as XsltCompiledContext; XPathNavigator loc = iter.Current != null?iter.Current.Clone() : null; object val = arg0.Evaluate(iter); XPathNavigator nav = val as XPathNavigator; if (nav == null && !strict) { var iterResult = val as XPathNodeIterator; if (iterResult != null) { return(iterResult); } var strResult = val as string; if (strResult == string.Empty) { DTMXPathDocumentWriter2 w = new DTMXPathDocumentWriter2(ctx.Processor.Root.NameTable, 10); nav = w.CreateDocument().CreateNavigator(); } } if (nav == null) { if (loc != null) { return(new XsltException("Cannot convert the XPath argument to a result tree fragment.", null, loc)); } else { return(new XsltException("Cannot convert the XPath argument to a result tree fragment.", null)); } } ArrayList al = new ArrayList(); al.Add(nav); return(new ListIterator(al, ctx)); }
public object Evaluate(XslTransformProcessor p) { if (select != null) { object o = p.Evaluate(select); // To resolve variable references correctly, we // have to collect all the target nodes here. // (otherwise, variables might be resolved with // different level of variable stack in // XslTransformProcessor). if (o is XPathNodeIterator) { ArrayList al = new ArrayList(); XPathNodeIterator iter = (XPathNodeIterator)o; while (iter.MoveNext()) { al.Add(iter.Current.Clone()); } o = new ListIterator(al, p.XPathContext); } return(o); } else if (content != null) { // XmlNodeWriter w = new XmlNodeWriter (false); // DTMXPathDocumentWriter w = new DTMXPathDocumentWriter (p.CurrentNode.NameTable, 200); DTMXPathDocumentWriter2 w = new DTMXPathDocumentWriter2(p.CurrentNode.NameTable, 200); Outputter outputter = new GenericOutputter(w, p.Outputs, null, true); p.PushOutput(outputter); content.Evaluate(p); p.PopOutput(); // return w.Document.CreateNavigator ().SelectChildren (XPathNodeType.All); // return w.CreateDocument ().CreateNavigator ().SelectChildren (XPathNodeType.All); // return w.Document.CreateNavigator (); return(w.CreateDocument().CreateNavigator()); } else { return(""); } }