2017-10-12 46 views
0

我试图使该功能返回(列表/ multidarray)7个BranchHours.childnodes的这个branchID我可以在我的代码隐藏页一点点代码调用XML元素。故障返回所有的字符串列表循环函数

这里是什么XMLFILE的一个部分看起来像(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)不会在未来可以参考其结果。

请让我知道如果你需要任何额外的信息。谢谢!

+0

你没告诉我们MyFunc'是如何'声明,但它看起来像它期待一个'清单(串)'作为参数,你传递一个'String'(“DR”), – Blackwood

+0

MYFUNC声明在我的app_code文件夹中 - 纠正我,如果我错了,但它期待一个字符串(“dr”),并期待返回值为来自retrun labelMan的List(字符串)?公共共享功能MYFUNC(BYVAL branchCode作为字符串)作为目录(串),并在网页的“代码”公共小组的Page_Load(发送者为对象,E作为EventArgs的)背后说我的代码处理Me.Load 呼叫BranchHours.branchHours.MyFunc(” dr“) Label1.Text = BranchHours.branchHours.MyFunc(”dr“) - 从类型'List(Of String)'转换为类型'String'无效。 结束小组 – DJN

回答

0

首先,你需要实例化(的字符串)列表。现在对你来说,这不是什么。

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>") 
+0

谢谢你,我不再显示现在我的功能的任何错误。我在我的代码隐藏页面调用函数后尝试修复这个错误'code' Label1.Text = BranchHours.branchHours.MyFunc(“dr”)---错误类型'System.Collections.Generic的值。 List(Of String)'不能转换为'String'。 – DJN

+0

我很高兴能够帮助解决您的问题。如果它确实回答了您的问题,请将其标记为已接受的答案。 Label1.Text是一个String,所以不要让MyFunc返回一个List(String),而应该让它返回一个String。类型需要匹配。列表(字符串)不是字符串。 – N0Alias

+0

这里我提出了调用和显示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”) 昏暗消息=的string.join(Environment.NewLine,rangex.ToList()) 对于每个项目作为字符串在rangex '执行与项 Label1.Text =消息 东西 Next End Sub – DJN

0

感谢那些谁帮我。这里的完整答案w /评论:)

备注 - 此代码将被审计,所以对于那些谁可以看到我应该添加测试或应该改善下面的代码的地方。请随时提供建议/评论。

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