You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

298 lines
11 KiB

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("<?{0}\t{1}?>", 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("</{0}>", reader.Name));
break;
case XmlNodeType.Text:
Console.WriteLine(string.Format("内容是:{0}", reader.Value));
break;
}
}
Console.WriteLine("************************************");
}
//获取信息
public Dictionary<string, string> 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<string, string> formAttrs = new Dictionary<string, string>();
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;
}
}
}