using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; namespace Teamcenter.Hello { public class ReaderCusXML { private XmlTextReader textReader; private XmlDocument doc; public ArrayList list = new ArrayList(); private Editor ed; public ReaderCusXML() { } public ReaderCusXML(string filepath, Document appodc) { ed = appodc.Editor; try { // 打开一个 XML 文件 textReader = new XmlTextReader(filepath); doc = new XmlDocument(); doc.Load(textReader); } catch (Exception s) { Console.WriteLine("Exception: {0}", s.ToString()); } } public ReaderCusXML(string filepath, Editor ed1) { this.ed = ed1; try { // 打开一个 XML 文件 textReader = new XmlTextReader(filepath); doc = new XmlDocument(); doc.Load(textReader); } catch (Exception s) { Console.WriteLine("Exception: {0}", s.ToString()); } } public void close() { if (textReader != null) textReader.Close(); } //获取指定的节点 private XmlNode getNode(XmlDocument doc, string nodeName) { XmlNodeList nodelist = doc.ChildNodes; int nodenum = nodelist.Count; Console.WriteLine("共有 " + nodenum + " 个节点"); foreach (XmlNode node in nodelist) { if (nodeName.Equals(node.Name)) return node; } return null; } //获取特定内容 public void GetALL(string root, string nodeName) { XmlReader reader = new XmlNodeReader(doc); bool isroot = true; Console.WriteLine("************************************"); list.Clear(); while (reader.Read()) { //ed.WriteMessage("name:"+reader.Name+"\n"); switch (reader.NodeType) { case XmlNodeType.XmlDeclaration: break; case XmlNodeType.Element: if (isroot) { ed.WriteMessage(isroot+"\n"); if (!root.Equals(reader.Name)) continue; else isroot = false; } else if (nodeName.Equals(reader.Name)) { //ed.WriteMessage("============\n"); if (reader.HasAttributes) { while (reader.MoveToNextAttribute()) { //ed.WriteMessage(string.Format("{0}={1}\n", reader.Name, reader.Value)); list.Add(reader.Value); } } } break; case XmlNodeType.EndElement: if (root.Equals(reader.Name)) isroot = true; break; case XmlNodeType.Text: Console.WriteLine(string.Format("内容是:{0}", reader.Value)); break; } } Console.WriteLine("************************************"); //showList(); return ; } //显示list private void showList() { ed.WriteMessage("-----------------------\n"); foreach (object o in list) { ed.WriteMessage((string)o+"\n"); } ed.WriteMessage("-----------------------\n"); } //显示所有内容 public void show() { XmlReader reader = new XmlNodeReader(doc); Console.WriteLine("************************************"); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.XmlDeclaration: Console.WriteLine(string.Format("", reader.Name, reader.Value)); break; case XmlNodeType.Element: Console.Write(string.Format("<{0}\t", reader.Name)); if (reader.HasAttributes) { while (reader.MoveToNextAttribute()) { Console.Write(string.Format("{0}={1}\t", reader.Name, reader.Value)); } } Console.WriteLine(">"); break; case XmlNodeType.EndElement: Console.WriteLine(string.Format("", reader.Name)); break; case XmlNodeType.Text: Console.WriteLine(string.Format("内容是:{0}", reader.Value)); break; } } Console.WriteLine("************************************"); } //获取信息 public Dictionary GetTitleInfo(string root, string blockName, string itemType) { XmlReader reader = new XmlNodeReader(doc); bool rangeStart = true; bool isroot = true; bool matched = false; string temp = "anybody"; string block = ""; string type = ""; string cad = ""; string tc = ""; bool writeable = false; Dictionary formAttrs = new Dictionary(); Console.WriteLine("************************************"); while (reader.Read()) { //ed.WriteMessage("name:"+reader.Name+"\n"); switch (reader.NodeType) { case XmlNodeType.XmlDeclaration: break; case XmlNodeType.Element: if (rangeStart) { if (isroot) { temp = reader.Name; if (!root.Equals(temp)) rangeStart = false; else isroot = false; } else if ("extension".Equals(reader.Name)) { matched = true; if (reader.HasAttributes) { while (reader.MoveToNextAttribute()) { //ed.WriteMessage(string.Format("{0}={1}\n", reader.Name, reader.Value)); if ("BlockName".Equals(reader.Name)) block = reader.Value; else if ("ItemType".Equals(reader.Name)) type = reader.Value; } } } else if (matched) { //是否是想要的信息 { if ((block.Equals(blockName)) && (type.Equals(itemType))) { matched = true; } else { matched = false; temp = "extension"; rangeStart = false; continue; } } if ("Item".Equals(reader.Name)) { } else if ("ItemRevision".Equals(reader.Name)) { } else if ("Form".Equals(reader.Name)) { if (reader.HasAttributes) { while (reader.MoveToNextAttribute()) { //Console.WriteLine(string.Format("{0}={1}\n", reader.Name, reader.Value)); if ("cad".Equals(reader.Name)) cad = reader.Value; else if ("tc".Equals(reader.Name)) { tc = reader.Value; } else if ("writeable".Equals(reader.Name)) { if ("1".Equals(reader.Value)) writeable = true; else writeable = false; } } } } } } break; case XmlNodeType.EndElement: if (temp.Equals(reader.Name)) rangeStart = true; else if ("Form".Equals(reader.Name)) { //Console.WriteLine(string.Format("cad={0},tc={1}", cad, tc)); if (writeable) { formAttrs.Add(cad, tc); cad = ""; tc = ""; writeable = false; } } break; case XmlNodeType.Text: break; } } reader.Close(); Console.WriteLine("************************************"); return formAttrs; } } }