【问题标题】:XML Data Binding in .NET - Getting node value where attribute value is equal to something.NET 中的 XML 数据绑定 - 获取属性值等于某物的节点值
【发布时间】:2013-05-22 15:35:22
【问题描述】:

我正在开发一个 .NET 控件,它需要根据节点中的属性值列出 XML 文件中的值,但我很难获取我的数据。

XML 格式如下:

<root>
  <item>
     <field name="business title">My Hardware Store</field>
     <field name="address">123 Main Street</field>
  </item>
  <item>
     <field name="business title">Corner Bar</field>
     <field name="address">345 Country Blvd</field>
  </item>
</root>

我已经使用以下 VB 正确加载了 XML 文件:

 Dim doc As New XmlDocument()

doc.Load(MapPath(filepath))
Dim nodes As XmlNodeList = doc.SelectNodes("root/item/field")

lvDirectoryListing.DataSource = nodes
'binding dataset to listview.
lvDirectoryListing.DataBind()

但是我在找出 ASCX 文件中的绑定时遇到了麻烦。我需要中继器来显示页面上的所有业务标题。因此,当节点名称为“字段”时,我需要节点值,并且name 属性值是“业务名称”。我可以找到有关如何获取节点值以及如何获取属性值的各种信息,但对于我要查找的内容却一无所获。帮助?

【问题讨论】:

    标签: .net xml vb.net data-binding ascx


    【解决方案1】:

    你不能把你的 xpath 改成:

    doc.SelectNodes("root/item/field[name='business title']")
    

    【讨论】:

    • 这看起来很合理,但是我会在 ASCX 文件中放入什么来显示它呢? ?
    • 不确定。不会是Bind("Value")吗?这就是为什么有些人更喜欢使用 MVVM 并绑定到 ViewModel 而不是直接绑定到 xml 文档的原因。
    • 那没有显示任何东西。我已经开始查看是否可以在我的数据绑定器中使用条件来解决问题。无论如何,我将需要我的数据源来保存其余数据以供以后的操作使用,因此此时在代码中对其进行过滤并没有真正的帮助。无论如何,谢谢您的回答!
    【解决方案2】:

    想通了这个。在VB代码中,我只需要拉下前两个节点:

    Dim nodes As XmlNodeList = doc.SelectNodes("root/item")
    

    然后,在 ASCX 文件中,使用数据绑定中的 XPath 将结果限制为具有此特定属性的字段的节点值:

    <%# XPath("feild[@name='business title']")%>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2013-05-14
      相关资源
      最近更新 更多