将 xml 的属性读取到树视图中
Read xml with atrributes into treeview
我一直在尝试将 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-th node text (n-th attribute text)
这是我对代码的解读:
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();
}
}
任何帮助将不胜感激:)
XmlNode 有一个您需要处理的 Attributes 集合。 XmlNode 的子节点只是其中的 XmlNode。
尝试像这样添加一个属性作为 TreeNode。
if (inXmlNode.Attributes.Any()) {
foreach (XmlAttribute attribute in inXmlNode.Attributes) {
String displayName = String.Format("({0})", attribute.Name)
inTreeNode.Nodes.Add(new TreeNode(displayName));
}
}
希望对您有所帮助! :)
看看
https://msdn.microsoft.com/en-us/library/system.xml.xmlnode%28v=vs.110%29.aspx
你会看到属性存储在属性属性中,而不是子节点属性中,所以如果你也检查这个集合你应该解决你的问题
我一直在尝试将 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-th node text (n-th attribute text)
这是我对代码的解读:
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();
}
}
任何帮助将不胜感激:)
XmlNode 有一个您需要处理的 Attributes 集合。 XmlNode 的子节点只是其中的 XmlNode。
尝试像这样添加一个属性作为 TreeNode。
if (inXmlNode.Attributes.Any()) {
foreach (XmlAttribute attribute in inXmlNode.Attributes) {
String displayName = String.Format("({0})", attribute.Name)
inTreeNode.Nodes.Add(new TreeNode(displayName));
}
}
希望对您有所帮助! :)
看看 https://msdn.microsoft.com/en-us/library/system.xml.xmlnode%28v=vs.110%29.aspx 你会看到属性存储在属性属性中,而不是子节点属性中,所以如果你也检查这个集合你应该解决你的问题