0

XML 解析の投稿の重複のように見えるかもしれませんが、ノードとデリゲート メソッドがどのように動作するかを実際に理解することはできません。私はXMLを持っています..

<?xml version="1.0" encoding="UTF-8"?>
<ParticipantService>
    <Response>
        <CourseProperties>
            <CourseTitle>AICC_Flash_Workshop_PPT_to_web_examples</CourseTitle>
            <CourseCode>123456</CourseCode>
            <Availability>Open</Availability>
            <Status>In Progress</Status>
            <ImageLink>HTTP://lmsstaging.2xprime.com/images/inprogress_icon.png</ImageLink>
            <CategoryCode>0</CategoryCode>
            <CategoryDesc>General</CategoryDesc>
        </CourseProperties>
        <CourseProperties>
            <CourseTitle>Behaviours</CourseTitle>
            <CourseCode>OBIUS</CourseCode>
            <Availability>Open</Availability>
            <Status>In Progress</Status>
            <ImageLink>HTTP://lmsstaging.2xprime.com/images/inprogress_icon.png</ImageLink>
            <CategoryCode>0</CategoryCode>
            <CategoryDesc>General</CategoryDesc>
        </CourseProperties>
        <CourseProperties>
            <CourseTitle>Customer Service Skills (Part - one)</CourseTitle>
            <CourseCode>css_1</CourseCode>
            <Availability>Open</Availability>
            <Status>In Progress</Status>
            <ImageLink>HTTP://lmsstaging.2xprime.com/images/inprogress_icon.png</ImageLink>
            <CategoryCode>0</CategoryCode>
            <CategoryDesc>General</CategoryDesc>
        </CourseProperties>

....

私の要件は、関連するコースの詳細をそれぞれの配列に保存することです。そのため、6 つの nsmutablearray を宣言しましたが、XMl からデータを取得する方法について混乱しています。私はこの方法でそれを試しています

foundCharacters メソッドで、文字列の値を次のように追加しています

videoUrlLink = [NSMutableString stringWithString:string];

そして didEndElement メソッドで

if ([elementName isEqualToString:@"CourseTitle"]) {
        [courseDetailList addObject:string];

    } 

しかし、XMl の最後では、配列に 1 つの値しか格納できません。どこか間違っている場合は教えてください。

4

1 に答える 1

1

というクラスがCourseあり、Courseオブジェクトには 、 などのプロパティがあるtitleとします。codeavailability

iVar を作成しcurrentCourseます。

次に、parser:didStartElement:namespaceURI:qualifiedName:attributes:(注: did start、 end ではありません!) メソッドで:

if ([elementName isEqualToString:@"CourseProperties"]) {
    //create a new course object
    currentCourse = [[Course alloc] init];
}

これにより、後続のコースのすべてのプロパティにコンテキストが与えられます。このdidEndElement:メソッドでは、基本的にすべてのコース プロパティに対してこれを行います。

if ([elementName isEqualToString:@"CourseTitle"]) {
    [currentCourse setTitle:string];
}

最後に、終了タグが見つかったら、CourseProperties新しいコースをどこかに保存します (これもdidEndElement:):

if ([elementName isEqualToString:@"CourseProperties"]) {
    //create a new course object
    [allMyCourses addObject:currentCourse];
    currentCourse = nil;
}
于 2012-05-21T16:29:42.790 に答える