/// <summary> /// Returns an INodeIterator instance that iterates the children /// of the current node; otherwise, <c>Null</c>. /// </summary> /// <returns></returns> public override INodeIterator GetChildren() { SifVersion version = Version; // Get all of the Element fields and children that match the // NodeTest into a list SifFormatter formatter = Adk.Dtd.GetFormatter(version); IList <Element> elements = formatter.GetContent(fSifElement, version); if (elements.Count == 0) { return(null); } else if (elements.Count == 1) { Element singleChild = elements[0]; if (singleChild is SimpleField) { return(new SingleNodeIterator(SimpleFieldPointer.Create(this, (SimpleField)singleChild))); } else { return(new SingleNodeIterator(Create(this, (SifElement)singleChild, version))); } } return(new AdkElementIterator(this, elements)); }
public override INodePointer CreateChild(SifXPathContext context, string name, int i) { SifVersion version = Version; IElementDef subEleDef = GetChildDef(name); SifFormatter formatter = Adk.Dtd.GetFormatter(version); SifElement sifElement = (SifElement)fElement; // Check to see if this child has a render surrogate defined IRenderSurrogate rs = subEleDef.GetVersionInfo(version).GetSurrogate(); if (rs != null) { return(rs.CreateChild(this, formatter, version, context)); } if (subEleDef.Field) { SifSimpleType ssf = subEleDef.TypeConverter.GetSifSimpleType(null); SimpleField sf = formatter.SetField(sifElement, subEleDef, ssf, version); return(SimpleFieldPointer.Create(this, sf)); } else { SifElement newEle = SifElement.Create(sifElement, subEleDef); formatter.AddChild(sifElement, newEle, version); return(new SifElementPointer(this, newEle, version)); } }
/// <summary> /// Called on the subclass when a specific NodePointer is requested by SIFXPath /// </summary> /// <param name="parent"></param> /// <param name="element"></param> /// <returns></returns> protected override INodePointer GetNodePointer(SifElementPointer parent, Element element) { if (element is SimpleField) { return(SimpleFieldPointer.Create(parent, (SimpleField)element)); } else { return(SifElementPointer.Create(parent, (SifElement)element, parent.Version)); } }
public override INodePointer CreateAttribute(SifXPathContext context, String name) { IElementDef subEleDef = GetChildDef(name); SifElement sifElement = (SifElement)fElement; if (subEleDef.Field) { SifSimpleType ssf = subEleDef.TypeConverter.GetSifSimpleType(null); SimpleField sf = ssf.CreateField(sifElement, subEleDef); sifElement.SetField(sf); return(SimpleFieldPointer.Create(this, sf)); } throw new ArgumentException( "Factory could not create a child node for path: " + Name + "/" + name); }
/// <summary> /// Called on the subclass when a specific NodePointer is requested by SIFXPath /// </summary> /// <param name="parent"></param> /// <param name="element"></param> /// <returns></returns> protected override INodePointer GetNodePointer(SifElementPointer parent, Element element) { return(SimpleFieldPointer.Create(parent, (SimpleField)element)); }