1

次の XML の「CIPCode」要素はオプションです。

<?xml version="1.0" encoding="utf-8"?>
<StateCodesList SchoolYear="2012-2013" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CourseCodesList.xsd">
    <Year>2013</Year>
    <Course>
        <StateCode>990001</StateCode>
        <Description>Reading</Description>
        <ShortName>Reading</ShortName>
        <LongName>Reading</LongName>
        <CIPCode>1.01</CIPCode>
        <Type>99</Type>
    </Course>
    <Course>
        <StateCode>9902</StateCode>
        <Description>Math</Description>
        <ShortName>Short</ShortName>
        <LongName>Long</LongName>
        <Type>70</Type>
    </Course>
</StateCodesList>

匿名型に要素を配置する次のコードがあります。

Using aStreamReader As New StreamReader(New MemoryStream(criteria.File)) 'File is the XML in Byte() form
    Dim xDoc As System.Xml.Linq.XDocument
    xDoc = System.Xml.Linq.XDocument.Load(aStreamReader)

    '....do some non-relevant stuff here

    Dim courses = From myCourse In xDoc.Descendants("Course")
                    Select New With
                        {
                            .StateCode = myCourse.Element("StateCode").Value, _
                            .Description = myCourse.Element("Description").Value, _
                            .ShortName = myCourse.Element("ShortName").Value, _
                            .LongName = myCourse.Element("LongName").Value, _
                            .Type = myCourse.Element("Type").Value, _
                            .CipCode = myCourse.Element("CIPCode").Value _
                        }
    '....do some non-relevant stuff here
End Using

CIPCode が省略されている場合、コードは例外 (オブジェクト参照がオブジェクトのインスタンスに設定されていません) をスローします。該当する場合に CIPCode が保存され、例外がスローされないようにコードを構成する方法はありますか?

4

1 に答える 1

2

該当する場合に CIPCode が保存され、例外がスローされないようにコードを構成する方法はありますか?

もちろん。それは本当に簡単です -代わりに文字列への明示的な変換を使用するだけです:

.CipCode = CType(myCourse.Element("CIPCode"), String)

そのNothingような要素がない場合は、それが表示されます。

Value(代わりにプロパティを使用するため、ドキュメントのVBバージョンは壊れていることに注意してください...)

于 2012-07-17T20:28:20.623 に答える