0

私はLINQを初めて使用するので、構文の一部が間違っているだけだと思います。私はオンラインで多くの例を見てきましたが、誰もが独自のスタイルを持っているようです.

クエリ対象の XML データは次のとおりです。

<ajax-response>
    <response type="object" id="unknown">
        <generic response="Success" message="Channel status will follow" />
    </response>
    <response type="object" id="unknown">
        <generic event="Status" privilege="Call" channel="SIP/452-000006fc" calleridnum="452" calleridname="Joe" connectedlinenum="430" connectedlinename="device" accountcode="" channelstate="6" channelstatedesc="Up" context="macro-dial-one" extension="s" priority="37" seconds="54" bridgedchannel="SIP/430-000006fd" bridgeduniqueid="1363822334.1829" uniqueid="1363822334.1828" />
    </response>
    <response type="object" id="unknown">
        <generic event="Status" privilege="Call" channel="SIP/430-000006fd" calleridnum="430" calleridname="device" connectedlinenum="452" connectedlinename="Joe" account="" state="Up" bridgedchannel="SIP/452-000006fc" bridgeduniqueid="1363822334.1828" uniqueid="1363822334.1829" />
    </response>
    <response type="object" id="unknown">
        <generic event="StatusComplete" items="2" />
    </response>
</ajax-response>

これが私がこれまでに持っているものです:

Function ParseXML(statusXML As XmlDocument) As String
    Dim xdoc As XDocument = XDocument.Load(New XmlNodeReader(statusXML))
    Dim parsed As StringBuilder = New StringBuilder()

    Dim query = From generic In xdoc.Descendants("generic") _
                Where generic.Attribute("privilege") IsNot Nothing And generic.Attribute("privilege").Value = "Call" _
                Select connectedlinenum = generic.Attribute("connectedlinenum").ToString, _
                       calleridnum = generic.Attribute("calleridnum").ToString

    For Each i In query
        parsed.Append(i.connectedlinenum).Append(",").Append(i.calleridnum).Append(vbCrLf)
    Next
    Return parsed.ToString
End Function

オブジェクトを参照しようとすると、 Where 句にgenericが含まれるため、オブジェクトがどのように機能するかを誤解していると思います。NullReferenceException

4

1 に答える 1

1

私はXml解析に精通していませんが、2つのノードにprivilege属性がありません。それがエラーの原因である可能性がありますか?

その場合、句のAndtoを変更するとどうなりますか?そうすれば、属性がない場合、ステートメントの後半部分は評価されません。AndAlsoWhereprivilege

于 2013-03-21T01:30:51.660 に答える