1

xmlStringをNSDictionaryに変換するためにXMLReaderを使用しており、一部のxml文字列に対しては正常に機能していますが、以下に表示されているxmlのnull辞書を提供しています

<?xml version=\"1.0\"?>
<THEME>
    <OBJ>
        <FORMBG>0x00E0E0E0</FORMBG>
        <ALERTBG>0x00B4B4B4</ALERTBG>
        <FORMFONT>0x0033001A</FORMFONT>
        <FORMFONT2>0x00575757</FORMFONT2>
        <FORMFONT3>0x003E3E37</FORMFONT3>
        <ROWSELECTORLIST>0x0000CC33</ROWSELECTORLIST>
        <ROWDIVIDER>0x00BBBBBB</ROWDIVIDER>
        <SUBHEADER>0x00A8A8A8</SUBHEADER>
        <SELECTORCOMPONENT>0x00C2C2C2</SELECTORCOMPONENT>
        <FOOTER>0x00796767</FOOTER>
    </OBJ>
</THEME>

私の変換コードは次のとおりです。

NSString *stringURL=[NSString stringWithFormat:@"http://202.58.232.138/mt/theme.aspx"];
NSURL *url=[NSURL URLWithString:stringURL];

NSMutableURLRequest *request=[[NSMutableURLRequest alloc] initWithURL:url];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

NSString *responseString=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"response string is %@",responseString);

NSDictionary *dictionary=[XMLReader dictionaryForXMLString:responseString error:nil];

URLはブラウザで次のデータを印刷しています

    0x00E0E0E00x00B4B4B40x0033001A0x005757570x003E3E370x0000CC330x00BBBBBB0x00A8A8A80x00C2C2C2
0x00796767

xcodeログに印刷すると、次のデータが表示されます。

<?xml version=\"1.0\"?>
<THEME>
    <OBJ>
        <FORMBG>0x00E0E0E0</FORMBG>
        <ALERTBG>0x00B4B4B4</ALERTBG>
        <FORMFONT>0x0033001A</FORMFONT>
        <FORMFONT2>0x00575757</FORMFONT2>
        <FORMFONT3>0x003E3E37</FORMFONT3>
        <ROWSELECTORLIST>0x0000CC33</ROWSELECTORLIST>
        <ROWDIVIDER>0x00BBBBBB</ROWDIVIDER>
        <SUBHEADER>0x00A8A8A8</SUBHEADER>
        <SELECTORCOMPONENT>0x00C2C2C2</SELECTORCOMPONENT>
        <FOOTER>0x00796767</FOOTER>
    </OBJ>
</THEME>

それがNSDictionaryに変換されていない理由だと思います。あなたが以前にそのような問題に直面したことがあるなら、助けてください。上記のxmlデータを[XMLReaderdictionaryForXMLString:responseString error:nil]に渡す場合; 応答文字列の場所では完全に機能しますが、上記のコードを実行すると、辞書=(null)が表示されます。

前もって感謝します!

4

3 に答える 3

3

ついに間違いを見つけました:

応答文字列のエスケープシーケンスをカウントしているので、NSDictionaryに解析しないのはなぜですか。エスケープシーケンスを空白に置き換えるために、以下の行を追加しました。

NSString *responseString=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
responseString=[responseString stringByReplacingOccurrencesOfString:@"\\" withString:@""];

これで、私のコードは完全に実行されています。解析後の出力は以下のとおりです。

xml dictianary is {
THEME =     {
    OBJ =         {
        ALERTBG =             {
            text = 0x00B4B4B4;
        };
        FOOTER =             {
            text = 0x00796767;
        };
        FORMBG =             {
            text = 0x00E0E0E0;
        };
        FORMFONT =             {
            text = 0x0033001A;
        };
        FORMFONT2 =             {
            text = 0x00575757;
        };
        FORMFONT3 =             {
            text = 0x003E3E37;
        };
        ROWDIVIDER =             {
            text = 0x00BBBBBB;
        };
        ROWSELECTORLIST =             {
            text = 0x0000CC33;
        };
        SELECTORCOMPONENT =             {
            text = 0x00C2C2C2;
        };
        SUBHEADER =             {
            text = 0x00A8A8A8;
        };
    };
};
}
于 2013-01-29T13:09:49.710 に答える
0

割り当てを入れてみましたか

NSDictionary *dics=[XMLReader dictionaryForXMLData:urlData error:nil];

非同期リクエストのコールバックで?それは私にとって完璧に機能します。

そもそもxmlのダウンロードに問題があるのではないかと思いますが、それをチェックしていません。

于 2013-01-25T09:57:29.423 に答える
0

辞書が初期化されていないと思います。

NSDictionary*dicsを初期化する必要があります。

于 2013-01-25T09:47:27.673 に答える