private static void ProcessImageTag(XmlNode placeholder, ReferenceElement ie) { Debug.Assert(placeholder != null); Debug.Assert(ie != null); //向上查找 drawbox var drawboxNode = placeholder.LookupAncestor(DrawTextBoxElement); if (drawboxNode.Name != DrawTextBoxElement) { throw new TemplateException("The placeholder of image must be in a 'frame'"); } drawboxNode.ParentNode.ReplaceChild(ie, drawboxNode); }
private static void ProcessPlaceHolderElement(XmlNode placeholder, ReferenceElement ie) { var placeholderType = placeholder.Attributes[TextPlaceholderTypeAttribute] .InnerText.Trim().ToLowerInvariant(); ; //处理图像占位符 switch (placeholderType) { case "image": ProcessImageTag(placeholder, ie); break; case "text": placeholder.ParentNode.ReplaceChild(ie, placeholder); break; default: throw new SyntaxErrorException("Unsupported placeholder type: " + placeholderType); } }
private static void ProcessIdentifierTag(XmlDocument xml, XmlNode placeholder, string value) { Debug.Assert(xml != null); Debug.Assert(placeholder != null); Debug.Assert(!string.IsNullOrEmpty(value)); var ie = new ReferenceElement(xml, value); if (placeholder.Name == TextPlaceholderElement) { ProcessPlaceHolderElement(placeholder, ie); } else { placeholder.ParentNode.ReplaceChild(ie, placeholder); } }