/*********************************************************************/ public void Clean(HtmlToXml objParser) { while (this.Children.Count > 0) { Node objNode = this.Children[0]; // Remove text nodes at the beginning that are empty if ((objNode is TextNode) && (objNode as TextNode).ToString().Trim() == "") { this.Children.RemoveAt(0); } else { break; } } while (this.Children.Count > 0) { Node objNode = this.Children[this.Children.Count - 1]; // Remove text nodes at the end that are empty if ((objNode is TextNode) && (objNode as TextNode).ToString().Trim() == "") { this.Children.RemoveAt(this.Children.Count - 1); } else { break; } } }
/*********************************************************************/ protected virtual bool WriteElement(HtmlToXml objParser, Element objElement, Element objParent, StringBuilder sb, int iLevel) { switch (Allowed(objElement, objParent)) { case ElementAction.Remove: return(false); case ElementAction.Allowed: return(objElement.Write(objParser, sb, iLevel)); case ElementAction.Convert: // ??? Not yet implemented return(false); case ElementAction.PromoteChildren: default: break; } bool bEmpty = true; foreach (Node objNode in objElement.Children) { if (this.Write(objParser, objNode, objParent, sb, iLevel + 1)) { bEmpty = false; } } return(!bEmpty); }
/*********************************************************************/ public override bool Write(HtmlToXml objParser, StringBuilder sb, int iLevel) { objParser.WriteIndentation(sb, iLevel); sb.Append(m_strText + objParser.NewLine); return(true); }
/*********************************************************************/ public virtual bool Write(HtmlToXml objParser, Node objNode, Element objParent, StringBuilder sb, int iLevel) { if (objNode is Element) { return(WriteElement(objParser, objNode as Element, objParent, sb, iLevel)); } return(objNode.Write(objParser, sb, iLevel)); }
/*********************************************************************/ public Element(HtmlToXml objParser, string strName) { m_strName = HtmlToXml.FormatName(strName, false); if (m_strName != "__" && m_strName == "") { throw new Exception("Illegal Element name: \"" + strName + "\""); } m_strName = strName; m_objParser = objParser; }
/*********************************************************************/ public override bool Write(HtmlToXml objParser, StringBuilder sb, int iLevel) { objParser.WriteIndentation(sb, iLevel); // Remove duplicate spaces and replace newlines and tabs with spaces. Encode < and > and & string strText = m_strText; // Encode < and > and & strText = strText.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\"", """).Trim(); if (strText != "") { sb.Append(strText); return(true); } return(false); }
/*********************************************************************/ public override bool Write(HtmlToXml objParser, StringBuilder sb, int iLevel) { bool bEmpty = true; string strAttributes = PackAttributes(); if (strAttributes != "") { bEmpty = false; } if (m_aChildren.Count > 0) { string strBegin = ""; if (this.Name != "__") { strBegin = string.Format("<{0}{1}>" + m_objParser.NewLine, this.Name, strAttributes); } StringBuilder sbChildren = new StringBuilder(); foreach (Node objNode in this.Children) { if (m_objParser.Write(objParser, objNode, objNode.Parent, sbChildren, iLevel + 1)) { bEmpty = false; } } if (m_objParser.RemoveEmpties && bEmpty && !m_objParser.EmptiesAllowed(this)) { return(false); } if (this.Name != "__") { m_objParser.WriteIndentation(sb, iLevel); sb.Append(" " + strBegin); sb.Append(sbChildren.ToString()); m_objParser.WriteIndentation(sb, iLevel); sb.AppendFormat("</{0}> " + m_objParser.NewLine, this.Name); } else { sb.Append(" " + sbChildren.ToString() + " "); } } else { if (m_objParser.RemoveEmpties && bEmpty && !m_objParser.EmptiesAllowed(this)) { return(false); } m_objParser.WriteIndentation(sb, iLevel); sb.AppendFormat(" <{0}{1} /> " + m_objParser.NewLine, this.Name, strAttributes); } return(!bEmpty); }
/*********************************************************************/ public Attribute(string strName, string strValue) { m_strName = HtmlToXml.FormatName(strName, true); m_strValue = strValue; }
/*********************************************************************/ public abstract bool Write(HtmlToXml objParser, StringBuilder sb, int iLevel);