我一直在尝试将XML读入treeView(并且大部分都成功),但是有一个问题:当标签具有属性时,它们不会被读取而树视图只会包含一个节点XML标记的名称,但不是它的属性:这是我的XML
<?xml version="1.0" encoding="utf-8"?>
<skiu:ikunk xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<economicalOperator>
<id>BGNCA00003003</id>
</economicalOperator>
<ikunk id="1">
<number>4</number>
<name>КИНГС ТАБАКО ИНТЕРНЕШЪНЪЛ ЕАД</name>
<certProvider>BTRUST</certProvider>
<certAuthSn>10221954</certAuthSn>
<certPin>5244</certPin>
<description>Кингс Табако BGNCA00003003</description>
</ikunk>
<controllers>
<number>1</number>
<name>PLC</name>
<description>FatekPLC</description>
<templateCode>1</templateCode>
</controllers>
<tags>
<templateEntryCode>T_TN</templateEntryCode>
<name>Пореден номер на транзакцията</name>
</tags>
</skiu_x003A_ikunk>
当我把它读到树视图中时,除了每个标签的属性外,我几乎可以获得所有预期的内容!
我的问题是如何使属性显示在各自的节点中,但是使用括号(),如下所示:第n个节点文本(第n个属性文本)
这是我对代码的阅读:
XmlDataDocument xmldoc = new XmlDataDocument();
XmlNode xmlnode;
FileStream fs = new FileStream(ofdXML.FileName, FileMode.Open, FileAccess.Read);
xmldoc.Load(fs);
xmlnode = xmldoc.ChildNodes[1];
treeView1.Nodes.Clear();
treeView1.Nodes.Add(new TreeNode(xmldoc.DocumentElement.Name));
TreeNode tNode;
tNode = treeView1.Nodes[0];
AddNode(xmlnode, tNode);
和AddNode的代码:
private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
{
XmlNode xNode;
TreeNode tNode;
XmlNodeList nodeList;
int i = 0;
if (inXmlNode.HasChildNodes)
{
nodeList = inXmlNode.ChildNodes;
for (i = 0; i <= nodeList.Count - 1; i++)
{
xNode = inXmlNode.ChildNodes[i];
inTreeNode.Nodes.Add(new TreeNode(xNode.Name));
tNode = inTreeNode.Nodes[i];
AddNode(xNode, tNode);
}
}
else
{
inTreeNode.Text = inXmlNode.InnerText.ToString();
}
}
任何帮助将不胜感激:)
答案 0 :(得分:1)
XmlNode有一个你需要解决的 Attributes 集合。 XmlNode的子项只是其中的XmlNodes。
尝试使用类似的方法将属性添加为TreeNode。
if (inXmlNode.Attributes.Any()) {
foreach (XmlAttribute attribute in inXmlNode.Attributes) {
String displayName = String.Format("({0})", attribute.Name)
inTreeNode.Nodes.Add(new TreeNode(displayName));
}
}
希望这有帮助! :)
答案 1 :(得分:0)
看看 https://msdn.microsoft.com/en-us/library/system.xml.xmlnode%28v=vs.110%29.aspx 你会看到属性存储在Attributes属性中,而不是ChildNodes属性中,所以如果你也检查这个集合你应该解决你的问题