首页 新闻 会员 周边

Xml数据解析

0
悬赏园豆:50 [已关闭问题] 关闭于 2017-01-06 11:21

有一串Xml数据如下:

<reponse>
<cmd>94</cmd>
<seq>87654322</seq>
<uri>sip:1015@115.28.22.67</uri>
<presets>
<desc id=“0">door</desc>
<desc id=“1">tree</desc>
<desc id=“2">window</desc>
<desc id="3">outdoor</desc>
</presets>
</reponse>

我想得到id和desc的数组形式,要怎么取出来,求解!

yangzhou15076的主页 yangzhou15076 | 初学一级 | 园豆:28
提问于:2016-09-12 11:31
< >
分享
所有回答(6)
0

那就解析XML呗?

顾晓北 | 园豆:10844 (专家六级) | 2016-09-12 11:35

要用正则表达式吗?我用的java语言

支持(0) 反对(0) yangzhou15076 | 园豆:28 (初学一级) | 2016-09-12 11:36

@yangzhou15076: 干嘛要用正则?Java,难道没有解析XML的库?还有xpath之类的?

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-09-12 11:41

@顾晓北: 我这里必须要用正则把这个数据匹配出来,正则不是太熟悉,你看我这么写对不对:

Pattern p = Pattern.compile("<desc id=\"(.+)\">(.+)</desc>");

支持(0) 反对(0) yangzhou15076 | 园豆:28 (初学一级) | 2016-09-12 15:07

@yangzhou15076: 正则我也不太熟,不过是我的话,我肯定是解析XML,不用正则

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-09-12 15:08

@顾晓北: 因为我这里之前都是用正则,几行行代码就搞定了,所以也想用正则,写了几个匹配规则但是都不匹配取不出来,正则还是不会用

支持(0) 反对(0) yangzhou15076 | 园豆:28 (初学一级) | 2016-09-12 15:19
0

直接找个xml 解析库解析就好了。

坤坤 | 园豆:919 (小虾三级) | 2016-09-12 15:05
0
MatchCollection mcs = Regex.Matches(xmlStr, "<desc\\s+id=\"(\\d+)\">([^<]*?)</desc>");
string[] id = mcs.Cast<Match>().Select(n => n.Groups[1].Value).ToArray();
string[] desc = mcs.Cast<Match>().Select(n => n.Groups[2].Value).ToArray();

 

 
Yu | 园豆:12980 (专家六级) | 2016-09-13 09:33
0

其实有个简单的方法,不管是java还是C++,你只需要找到规律。比如你想取id和desc这个字段,你就找到<desc id=>这个字段,然后查值。这个以后你写爬虫也会遇到。欢迎采纳

Boblim | 园豆:492 (菜鸟二级) | 2016-09-13 14:12
0
 1             string xml = @"<reponse>
 2 <cmd>94</cmd>
 3 <seq>87654322</seq>
 4 <uri>sip:1015@115.28.22.67</uri>
 5 <presets>
 6 <desc id=""0""> door </desc>
 7 <desc id=""1"">tree</desc>
 8   <desc id=""2"">window</desc>
 9 <desc id=""3""> outdoor </desc>
10      </presets>
11      </reponse> ";
12 
13             object o = XmlConvert.DeserializeObject<reponse>(xml);
14             MatchCollection mcs = Regex.Matches(xml, "<desc\\s+id=\"(\\d+)\">([^<]*?)</desc>");
15             //MatchCollection mcs = Regex.Matches(xml, "<desc\\s+id\\s*=\\s*\"(\\d+)\"\\s*>([^<]*?)</desc>");
16             string[] id = mcs.Cast<Match>().Select(n => n.Groups[1].Value).ToArray();
17             string[] desc = mcs.Cast<Match>().Select(n => n.Groups[2].Value).ToArray();

JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-09-20 10:51
0

linqtoxml

Zachary_Fan | 园豆:762 (小虾三级) | 2016-10-05 17:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册