1

我正在使用XMLReader将 xmlString 转换为 NSDictionary,它对某些 xml 字符串运行良好。但它为下面显示的 xml 提供了空字典

<?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];

该网址正在浏览器上打印以下数据

    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 数据传递给 for [XMLReader dictionaryForXMLString: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 回答