【问题标题】:Trouble Returning List of string of all looped xml elements in function无法返回函数中所有循环 xml 元素的字符串列表
【发布时间】:2018-03-24 18:25:36
【问题描述】:

我正在尝试使此函数返回此分支 ID 的 7 个 BranchHours.childnodes 的(列表/多数组),我可以在我的代码隐藏页面中使用一些代码来调用它。

这是 xml 文件的一部分(BranchesInfo)

<BranchInfo>
    <BranchId>db</BranchId>
    <Name></Name>
    <ShortName></ShortName>
    <ImageUrl></ImageUrl>
    <BranchHours>
      <Hours>
        <DayOfWeek>Sunday</DayOfWeek>
        <Open>12:00</Open>
        <Close>5:00</Close>
      </Hours>
      <Hours>
        <DayOfWeek>Monday</DayOfWeek>
        <Open>10:00</Open>
        <Close>8:00</Close>
      </Hours>
      <Hours>
        <DayOfWeek>Tuesday</DayOfWeek>
        <Open>10:00</Open>
        <Close>8:00</Close>
      </Hours>
      <Hours>
        <DayOfWeek>Wednesday</DayOfWeek>
        <Open>10:00</Open>
        <Close>8:00</Close>
      </Hours>
      <Hours>
        <DayOfWeek>Thursday</DayOfWeek>
        <Open>10:00</Open>
        <Close>6:00</Close>
      </Hours>
      <Hours>
        <DayOfWeek>Friday</DayOfWeek>
        <Open>10:00</Open>
        <Close>6:00</Close>
      </Hours>
      <Hours>
        <DayOfWeek>Saturday</DayOfWeek>
        <Open>12:00</Open>
        <Close>5:00</Close>
      </Hours>
    </BranchHours>
</BranchInfo>

代码

'app_code function below 
Public Shared Function MyFunc(ByVal branchCode As String) As List(Of String)

    Dim URLString As String = "url/branchesTesting.xml" 

    Dim xmlDoc As XDocument = XDocument.Parse(URLString)

    XDocument.Load(URLString)
    Dim labelMan As List(Of String)
    Dim x As Integer = (0) 'looping variable
    ' Dim i As Integer = 1
    Dim branchid = xmlDoc.XPathSelectElements("/BranchesInfo/BranchInfo[BranchId='" & branchCode & "']/BranchHours/Hours")

    'Dim varList As New List(Of String)
    Dim Items = From BranchHours In xmlDoc.XPathSelectElements("/BranchesInfo/BranchInfo[BranchId='" & branchCode & "']/BranchHours/Hours") _
    Select DayOfWeek = (BranchHours.Elements("DayOfWeek").Value),
    Open = (BranchHours.Elements("Open").Value), _
    Close = (BranchHours.Elements("Close").Value)

    '  Dim lists = xmlDoc.Root.Elements("BranchHours").[Select](Function(element) element.Value).ToList()
    For Each Hours In Items
    '   For i As Integer = 0 To Items.Count - 1
        '   lists = labelMan
        labelMan = "<div>DayOfWeek:" & Hours.DayOfWeek & "Open:" & Hours.Open & "Close: " & Hours.Close & "</div>" ' ----- error Error  34  Value of type 'String' cannot be converted to 'System.Collections.Generic.List(Of String)'.

    '  Else
        '     i += 1
    ' End If
        labelMan = labelMan
    'Next
    Next
    '  If labelMan = "" Then
        'labelMan = "No Results."
    'End If

    Return labelMan  
End Fuction

Public Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    Call BranchHours.branchHours.MyFunc("dr")

    Label1.Text = BranchHours.branchHours.MyFunc("dr") ' ----- Error Error  35  Value of type 'System.Collections.Generic.List(Of String)' cannot be converted to 'String'. 

End Sub

理想的结果

Day of the Week     Open    Close
(0)Sunday           12:00   5:00
(1)Monday           10:00   8:00
(2)Tuesday          10:00   8:00
(3)Wednesday        10:00   8:00
(4)Thursday         10:00   6:00
(5)Friday           10:00   6:00
(6)Saturday         10:00   5:00

--- (i) 将不可见,以供将来参考结果。

如果您需要任何其他信息,请告诉我。谢谢!

【问题讨论】:

  • 您没有向我们展示MyFunc 是如何声明的,但看起来它期望List(Of String) 作为参数,而您传递的是String(“博士”),
  • myfunc 在我的 app_code 文件夹中声明 - 如果我错了,请纠正我,但它需要一个字符串(“dr”)并从重新运行中寻找返回值是一个列表(字符串)标签人?公共共享函数 MyFunc(ByVal branchCode As String) As List(Of String) 和我在页面“代码”后面的代码 Public Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load Call BranchHours.branchHours.MyFunc("dr ") Label1.Text = BranchHours.branchHours.MyFunc("dr") -- 从“List(Of String)”类型到“String”类型的转换无效。结束子

标签: asp.net xml vb.net multidimensional-array


【解决方案1】:

首先你需要实例化你的 List(of String)。现在对你来说什么都不是。

Dim labelMan As List(Of String) = New List(of String)

那你需要使用List(of T) Add方法:

labelMan.Add("<div>DayOfWeek:" & Hours.DayOfWeek & "Open:" & Hours.Open & "Close: " & Hours.Close & "</div>") 

【讨论】:

  • 谢谢,我的函数中不再显示任何错误。在我的代码隐藏页面code Label1.Text = BranchHours.branchHours.MyFunc("dr") --- Error 36 Value of type 'System.Collections.Generic.List( Of String)' 不能转换为 'String'。
  • 很高兴能够帮助您解决问题。如果它确实回答了您的问题,请将其标记为已接受的答案。 Label1.Text 是一个字符串,所以不要让 MyFunc 返回一个 List(of String),而应该让它返回一个字符串。类型需要匹配。列表(字符串)不是字符串。
  • 这是我想出的调用和显示 myfunc() 的解决方案。 code Public Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load Call BranchHours.branchHours.MyFunc("dr") Dim i As Integer = 0 Dim rangex As List(Of String) = BranchHours.branchHours.MyFunc ("dr") Dim message = String.Join(Environment.NewLine, rangex.ToList()) For Each Items As String In rangex ' 对项目做一些事情 Label1.Text = message Next End Sub
【解决方案2】:

再次感谢帮助过我的人。这是带有 cmets 的完整答案:)

旁注——此代码将被审核,因此对于那些可以看到我应该在下面的代码中添加测试或改进的地方的人。请随时提供建议/评论。

App_Code 函数 >

Namespace BranchHours
    Public Class branchHours

        'function will accecpt string of branch ID and return value to be a List(of string)
        Public Shared Function MyFunc(ByVal branchCode As String) As List(Of String)
            'set XML URL path
            Dim URLString As String = "url/branchesTesting.xml"
            'load URL Path
            Dim xmlDoc As XDocument = XDocument.Load(URLString)

            ' instantiate List(of String)
            Dim labelMan As List(Of String) = New List(Of String)
            'define items start path in xml document based on passsed branchcode id
            'select and set xml element variable and return value/innertext for branch hours
            Dim Items = From BranchHours In xmlDoc.XPathSelectElements("/BranchesInfo/BranchInfo[BranchId='" & branchCode & "']/BranchHours/Hours") _
            Select DayOfWeek = (BranchHours.Elements("DayOfWeek").Value),
            Open = (BranchHours.Elements("Open").Value), _
            Close = (BranchHours.Elements("Close").Value) _
            'BranchID = (branchname.Elements("BranchId").Value)

            For Each Hours In Items
                ' use the List(of T) Add method: to add each hours' nodes to list, you can also add some html tags here if you to style it a bit more then plain text
                labelMan.Add(Hours.DayOfWeek & "," & Hours.Open & "," & Hours.Close)

            Next

            Return labelMan
        End Function


    End Class
End Namespace

代码背后>

     Public Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
' this line will call one of the specified list items
            Label2.Text = BranchHours.branchHours.MyFunc("dr").ElementAt(1)


            Call BranchHours.branchHours.MyFunc("dr")
'This block below will return the full list of branchhours
        Dim i As Integer = 0

        Dim rangex As List(Of String) = BranchHours.branchHours.MyFunc("dr")
        Dim message = String.Join(Environment.NewLine, rangex.ToList())


        For Each Items As String In rangex
           ' Do something with items
           Label1.Text = message


        'Next
    End Sub

前面的.aspx

<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="Default3bh.aspx.vb" Inherits="Default3bh" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">

    <asp:Label ID="Label1" runat="server" ></asp:Label>
    <asp:Label ID="Label2" runat="server" ></asp:Label>
</asp:Content>


<asp:Content ID="Content3" ContentPlaceHolderID="AdditionalContent" Runat="Server">
</asp:Content>

结果 >

Label2 : Monday,10:00,6:00

label1 : Sunday,Closed,Closed Monday,10:00,6:00 Tuesday,10:00,8:00 Wednesday,10:00,6:00 Thursday,10:00,6:00 Friday,10:00,6:00 Saturday,10:00,5:00

【讨论】:

    猜你喜欢
    • 2016-07-06
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    相关资源
    最近更新 更多