0

XML (XDocument) ドキュメントをそのまま列挙する必要があります...

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<applied>
  <ah ID="8298" userId="87459" roleId="2700" />
  <ah ID="8300" userId="87459" roleId="2699" />
  <ah ID="8299" userId="87460" roleId="2700" />
</applied>

...and のすべての値を 2 つの個別のオブジェクトに抽出userIDroleIDますStringBuilder

私は初めて Linq をいじっていますが、苦労しています。助けていただければ幸いです (これは VB Web フォーム アプリです)。単一の値を取得する Linq の例をたくさん見てきましたが、必要な方法で同時に 2 つの値を取得することはありません。

また、この XML ファイルの長さは最大 100,000 行になる可能性があります。FOR EACHLinq は、たとえばループよりもメモリ効率が高いですか? そうでない場合、誰かが例を挙げてもらえますFOR EACHか?

前もって感謝します。

更新:結果は次のようになります。

Userids = "87459,87459,87460"
roleIds = "2700,2699,2700"
4

1 に答える 1

1

まず、xml をファイル システムからメモリに取得する必要があります。これをデシリアライゼーションと呼びます。これを行うための私の好ましい方法は、xml のモデルを使用することです。これは、xml シリアライザーにファイルの解析方法を伝えるためのいくつかの属性を持つ単なるクラスです。

<XmlRoot("applied")> _
Public Class Applied
    <XmlElement("ah")> _
    Public Property AhList As List(Of Ah)
End Class

Public Class Ah
    <XmlAttribute("ID")> _
    Public Property ID As Integer
    <XmlAttribute("userID")> _
    Public Property UserID As Integer
    <XmlAttribute("roleID")> _
    Public Property RoleID As Integer
End Class

XmlAttribute は、属性が xml で呼び出されるものをシリアライザーに正確に伝えますが、モデルでは任意の名前を使用できることに注意してください<XmlAttribute("userID")> Public Property UserID As Integer

このモデルができたので、xml から逆シリアル化する必要があります。

Dim appls As New Applied()
Dim serializer As XmlSerializer = Nothing
serializer = New XmlSerializer(GetType(Applied))
appl = serializer.Deserialize(xd.CreateReader()) ' xd is your XDocument

これで、すべての xml がapplsオブジェクトに逆シリアル化されるはずです。このオブジェクトには、モデルによると、AhListxml 内のすべての要素のリストである と呼ばれるプロパティがあります。List(Of Ah) は IEnumerable であるため、LINQ を使用できます。

于 2013-11-14T16:11:13.827 に答える