谁能向我解释为什么我不能“获得该节点的所有子节点"? [英] Can anyone explain to me why I can't "get all the child nodes of the node"?

查看:87
本文介绍了谁能向我解释为什么我不能“获得该节点的所有子节点"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下要反序列化的XML文件:

I have the followin XMLfile that I''m trying to deserialize:

<?xml version="1.0" encoding="Windows-1252"?>
<ChildForm>
  <Control Type="System.Windows.Forms.Button" Name="btnConfigForm" ForeColor.A="255" ForeColor.B="0" ForeColor.R="0" ForeColor.G="0" BackColor.A="255" BackColor.R="240" BackColor.B="240" BackColor.G="240">
    <Control Type="System.Windows.Forms.Button" Name="btn30" ForeColor.A="255" ForeColor.B="0" ForeColor.R="0" ForeColor.G="0" BackColor.A="255" BackColor.R="255" BackColor.B="0" BackColor.G="0">
      <Control Type="System.Windows.Forms.Button" Name="btn32" ForeColor.A="255" ForeColor.B="0" ForeColor.R="0" ForeColor.G="0" BackColor.A="255" BackColor.R="255" BackColor.B="0" BackColor.G="255">
        <Control Type="System.Windows.Forms.Button" Name="btn33" ForeColor.A="255" ForeColor.B="255" ForeColor.R="255" ForeColor.G="255" BackColor.A="255" BackColor.R="0" BackColor.B="0" BackColor.G="128">
          <Control Type="System.Windows.Forms.Button" Name="btn41" ForeColor.A="255" ForeColor.B="255" ForeColor.R="255" ForeColor.G="255" BackColor.A="255" BackColor.R="0" BackColor.B="0" BackColor.G="0" />
        </Control>
      </Control>
    </Control>
  </Control>
</ChildForm>


我有以下子例程应该在每个控制"节点之间循环:


I have the following subroutine that is supposed to cycle through each "Control" node:

Public Shared Sub Deserialise(c As Control, XmlFileName As String)
    If File.Exists(XmlFileName) Then
        Dim xmlSerialisedForm As New XmlDocument()
        xmlSerialisedForm.Load(XmlFileName)
        Dim topLevel As XmlNode
        topLevel = xmlSerialisedForm.ChildNodes(1)

        frmConfigForm.lblForTesting.Text = CType(topLevel.ChildNodes.Count, String)

        For Each n As XmlNode In topLevel.ChildNodes
            '     SetControlProperties(DirectCast(c, Control), n)
        Next n

    End If
End Sub


现在,Rem''d行是在正常情况下依次处理每个节点的子例程,它在传递给它的一个节点(第一个控制"节点)上运行良好.我添加了Count行以进行故障排除,因为我试图弄清为什么它只给我一个处理过的节点,却发现它给我的节点数只有一个. "topLevel"产生正确的"Childform","topLevel.ChildNodes"产生正确的"Control",但仅产生一个,总共有五个"Control"节点.有人可以告诉我我在做什么错吗?


Now, the Rem''d line is the subroutine that processes each node in turn under normal circumstances, and it does fine on the one node that is delivered to it - the first "Control" node. I added the Count line for troubleshooting as I tried to figure out why it only gave me one processed node, and I discovered that it gave me a node count of one. "topLevel" yields "Childform", which is correct, and "topLevel.ChildNodes" yields "Control", which is correct, but it only yields one, and there are a total of five "Control" nodes. Can someone please explain to me what I''m doing wrong?

推荐答案

您好,确实共有五个控件.但是顶层只有一个孩子.

如果您看到相应的树结构,则会发现类似的内容,

ChildForm(0级)
-控制(级别1,级别0的子级)
--控制(级别2,级别1的子级)
---控件(3级,2级子级)
----控制项(第4级,第3级的孩子)
-----控制项(级别5,级别4的子级)

因此,您有5个Control节点,但它们处于不同级别.您会发现单个控件是顶级子级.

根据您的期望,我认为您的xml结构应为

Hi, it is true that there are five controls in total. But top level have only one child.

If you see corresponding tree structure than you will find something like,

ChildForm (level 0)
- Control (level 1, child of level 0)
- - Control (level 2, child of level 1)
- - - Control (level 3, child of level 2)
- - - - Control (level 4, child of level 3)
- - - - - Control (level 5, child of level 4)

So, you have 5 Control node, but they are in different level. You will find single control as child of top level.

Based on your expectation, I think, your xml structure should be

<?xml version="1.0" encoding="Windows-1252"?>
<ChildForm>
  <Control Type="System.Windows.Forms.Button" Name="btnConfigForm" ForeColor.A="255" ForeColor.B="0" ForeColor.R="0" ForeColor.G="0" BackColor.A="255" BackColor.R="240" BackColor.B="240" BackColor.G="240">
        </Control>

    <Control Type="System.Windows.Forms.Button" Name="btn30" ForeColor.A="255" ForeColor.B="0" ForeColor.R="0" ForeColor.G="0" BackColor.A="255" BackColor.R="255" BackColor.B="0" BackColor.G="0">
      </Control>
      <Control Type="System.Windows.Forms.Button" Name="btn32" ForeColor.A="255" ForeColor.B="0" ForeColor.R="0" ForeColor.G="0" BackColor.A="255" BackColor.R="255" BackColor.B="0" BackColor.G="255">
 </Control>
        <Control Type="System.Windows.Forms.Button" Name="btn33" ForeColor.A="255" ForeColor.B="255" ForeColor.R="255" ForeColor.G="255" BackColor.A="255" BackColor.R="0" BackColor.B="0" BackColor.G="128">
</Control>
          <Control Type="System.Windows.Forms.Button" Name="btn41" ForeColor.A="255" ForeColor.B="255" ForeColor.R="255" ForeColor.G="255" BackColor.A="255" BackColor.R="0" BackColor.B="0" BackColor.G="0" />   
  
</ChildForm>


这篇关于谁能向我解释为什么我不能“获得该节点的所有子节点"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆