2017-08-14 49 views
0

我正在使用Visual Basic应用程序来生成和管理数据,这些数据同时将被加载到网页中。动态寻址xml文档字段

我选择通过XML来做到这一点,因为它似乎是阻力最小的路径。

这不是一个标准的xml文件,几乎每个元素都有一个唯一的名称,可以被vb应用程序和网页引用,以确保数据在两种情况下都能被正确识别。然而,由于该数据的复杂性我需要能够引用的字段动态地

例如

TextBox控件对应于XML元素,他们将数据加载到

每个具有唯一的名称
Textbox Name = xml.<root>.<Name> 
Textbox Age = xml.<root>.<Age> 
Textbox Height = xml.<root>.<Height> 

的想法是,更新功能将成为所有文本框相同,将根据已更新该控件的名称标识的XML元素:

xml.<root>. & Control.name = control.value 

但我不能很好的解决这个问题。

+0

我建议你把每个节点的XPATH地址放到相应控件的'.Tag'属性中。 – SSS

+0

我想过这个,但我仍然会遇到同样的问题,我试图使用字符串引用xml元素 –

回答

0

您必须使用BindingSource将XML中的数据绑定到控件,如下所示。

查找到下面的代码,注释将讲解内容

输入:

<root> 
    <Name>Kumar Kumar</Name> 
    <Age>28</Age> 
    <Height>6</Height> 
</root> 

代码:

 'DECLARE A BINDING SOURCE 
     Dim bs As BindingSource = New BindingSource() 

     'DECALRE DATASET TO READ XML 
     Dim ds As DataSet = New DataSet() 

     'LOAD THE DATASET WITH XML 
     ds.ReadXml("C:\\Users\\XXXXX\\Desktop\\test\\test.xml") 

     'BIND THE DATASET TO BINDINGSOURCE WHICH HAS LOADED XML 
     bs.DataSource = ds 
     bs.DataMember = ds.Tables(0).TableName 

     'THIS IS IMPORTANT TO BIND THE CONTROLS TO MEMEBERS OF BINDING SOURCE 
     'THE FIRST PARAMETER OF THE ADD, IS THE "TEXT" ATTRIBUTE OF TEXT BLOCK 
     'SECOND PARAMETER OF THE ADD, IS BINDING SOURCE 
     'THIRD PARAMETER IS THE XML ATTRIBUTE TO BE BOUND 
     TextBoxName.DataBindings.Add("Text", bs, "Name") 
     TextBoxAge.DataBindings.Add("Text", bs, "Age") 
     TextBoxHeight.DataBindings.Add("Text", bs, "Height") 
0

只是为了我想我会添加记录我在这种情况下最终使用的解决方案。我知道这不是一个可部署的解决方案,但在我的具体情况下,这完美地工作。

基本上,每个包含要从XML更新的信息的div都有自己的ID,然后XML中的对应标记也与div的ID具有相同的名称。那么JS代码如下。

// read xml file into XMLDoc //get html elements bytagname "div" and 
// then for loop through all of them 
if (TableCells[i].id != "") { 
    xDataInput = XMLDoc.getElementsByTagName(TableCells[i].id); 
    if (xDataInput[0].innerHTML == "True") { 
     TableCells[i].className = "Active"; 
    } 
} 

再一次,这只适用于所有XML字段都有唯一名称的情况。另外,任何不从XML获取数据的div标签都必须没有标识,否则您需要在for循环内找到处理它们的方法。