110,568
社区成员
发帖
与我相关
我的任务
分享
//读取XML属性值,每个子级,增加一个加号(顺序必须按照层级关系)
//比如:A=+1,B=++2,C=+++3,B1=++22,C1=+++33,
//当前程序结果为:A=1,B=2,C=3,B1=22,C1=33,
private static StringBuilder str = new StringBuilder();
static void Main(string[] args)
{
string xmlPath = @"C:\Users\hu\Desktop\new 2.xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
WriteEachTable(xmlDoc.SelectSingleNode("DATA").ChildNodes);
}
private static void WriteEachTable(XmlNodeList choko)
{
foreach (XmlNode item in choko)
{
string Name = item.Attributes["id"].Value;
str.Append(item.Name + "=" + Name + ",");
if (item.ChildNodes.Count > 0)
WriteEachTable(item.ChildNodes);
}
}
private static string FindXPath(XmlNode node)
{
StringBuilder builder = new StringBuilder();
while (node != null)
{
switch (node.NodeType)
{
case XmlNodeType.Attribute:
builder.Insert(0, "/@" + node.Name);
node = ((XmlAttribute)node).OwnerElement;
break;
case XmlNodeType.Element:
int index = FindElementIndex((XmlElement)node);
builder.Insert(0, "/" + node.Name);
node = node.ParentNode;
break;
case XmlNodeType.Document:
return builder.ToString();
default:
throw new ArgumentException("Only elements and attributes are supported");
}
}
throw new ArgumentException("Node was not in a document");
}
private static int FindElementIndex(XmlElement element)
{
XmlNode parentNode = element.ParentNode;
if (parentNode is XmlDocument)
{
return 1;
}
XmlElement parent = (XmlElement)parentNode;
int index = 1;
foreach (XmlNode candidate in parent.ChildNodes)
{
if (candidate is XmlElement && candidate.Name == element.Name)
{
if (candidate == element)
{
return index;
}
index++;
}
}
throw new ArgumentException("Couldn't find element within parent");
}