Beispiel #1
0
		// 根据xml编辑框中的内容创建后代
		void BuildDescendant()
		{
			// 采用加虚根的方法

			//this.SetFreshValue();

			Debug.Assert(this.m_childrenExpand == ExpandStyle.Collapse, "不是闭合状态不要用本函数");

			string strAdditionalNsString = "";

			string strInnerXml = "";
			// 2.得到attributes关闭时的text
			XmlText oText = this.GetContentText();
			if (oText != null) 
			{
				strInnerXml = oText.Text.Trim();
			}
			else 
			{
				Debug.Assert(false, "必须有text对象");
			}

			NamespaceItemCollection nsColl = NamespaceItemCollection.GatherOuterNamespaces(
				(ElementItem)this);

			if (nsColl.Count > 0)
			{
				strAdditionalNsString = nsColl.MakeAttrString();
			}

			string strXml = "";
			if (this == this.m_document.VirtualRoot)
			{
				strXml = strInnerXml;
			}
			else
			{
				strXml = "<root "+ strAdditionalNsString + " >\r\n" + strInnerXml + "</root>";
			}

			this.ClearChildren();

			this.children = new ItemList();


			XmlDocument dom = new XmlDocument();
			dom.LoadXml(strXml);

			XmlNode root = null;
			if (this == this.m_document.VirtualRoot)
			{
				root = dom;
			}
			else
			{
				root = dom.DocumentElement;
			}

			foreach(XmlNode node in root.ChildNodes)
			{
				Item item = this.m_document.allocator.newItem(node,
					this.m_document);

			
				ElementInitialStyle style = new ElementInitialStyle();
				style.attrsExpandStyle = ExpandStyle.Expand;
				style.childrenExpandStyle = ExpandStyle.Expand;
				style.bReinitial = false;

				item.Initial(node,
					this.m_document.allocator,
					style,
                    true);

				// 这个函数是为Flush服务的函数,所以不应再使用时间戳加大
				this.AppendChildInternal(item,false,true);
			}

		}
Beispiel #2
0
		public ItemList SelectItems(string strXpath,
			XmlNamespaceManager mngr)
		{
			ItemList items = new ItemList();

			XPathNavigator nav = this.CreateNavigator();
			XPathExpression expr = nav.Compile(strXpath);
			expr.SetContext(mngr);


			XPathNodeIterator ni = nav.Select(expr);
			while(ni.MoveNext())
			{
				Item item = ((XmlEditorNavigator)ni.Current).Item;
				items.Add(item);
			}
			return items;
		}
Beispiel #3
0
		// 根据xml编辑框中的内容创建属性
		void BuildAttrs()
		{
			//this.SetFreshValue();

			Debug.Assert(m_attrsExpand == ExpandStyle.Collapse, "不是闭合状态不要用本函数");

			NameTable nt = new NameTable();

			// 创建名字空间
			XmlNamespaceManager nsmgr = GatherOuterNamespaces(
				this,
				nt);

			XmlParserContext context = new XmlParserContext(nt,
				nsmgr,
				null,
				XmlSpace.None);


			string strAttrsXml = "";
			// 2.得到attributes关闭时的text
			XmlText oText = this.GetAttributesText();
			if (oText != null) 
			{
				strAttrsXml = oText.Text.Trim();

				if (strAttrsXml != "")
					strAttrsXml = " " + strAttrsXml;
			}
			else 
			{
				Debug.Assert(false, "必须有text对象");
			}

			string strFragmentXml = "<" + this.Name + strAttrsXml + "/>";

            /*
            TextReader tr = new StringReader(strFragmentXml);
            XmlReaderSettings settings = new XmlReaderSettings();
            settings..XmlResolver = resolver;

            XmlReader reader = XmlReader.Create(tr, settings,
                context);
             * */

			// 过一段时间做XmlSchema校验
			XmlValidatingReader reader =
				new XmlValidatingReader(strFragmentXml,
				XmlNodeType.Element,
				context);
			
			// 不根据schema进行校验
			reader.ValidationType = ValidationType.None; 

			this.attrs = new ItemList();

			while(true)
			{
				if (reader.Read() == false)
					break;

				if (reader.MoveToFirstAttribute() == false)
					goto CONTINUE;

				while(true)
				{
					AttrItem attr = this.m_document.CreateAttrItem(reader.Name);
					attr.Initial(reader);
					this.AppendAttrInternal(attr,false,true);
					if (reader.MoveToNextAttribute() == false)
						break;
				}

			CONTINUE:
				break;
			}
		}
Beispiel #4
0
		// strXpath	可以是相对路径
		public ItemList SelectItems(string strXpath)
		{
			ItemList items = new ItemList();

			XPathNavigator nav = this.CreateNavigator();
		
			XPathNodeIterator ni = nav.Select(strXpath);
			while(ni.MoveNext())
			{
				Item item = ((XmlEditorNavigator)ni.Current).Item;
				items.Add(item);
			}
			return items;
		}