有一串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的数组形式,要怎么取出来,求解!
那就解析XML呗?
要用正则表达式吗?我用的java语言
@yangzhou15076: 干嘛要用正则?Java,难道没有解析XML的库?还有xpath之类的?
@顾晓北: 我这里必须要用正则把这个数据匹配出来,正则不是太熟悉,你看我这么写对不对:
Pattern p = Pattern.compile("<desc id=\"(.+)\">(.+)</desc>");
@yangzhou15076: 正则我也不太熟,不过是我的话,我肯定是解析XML,不用正则
@顾晓北: 因为我这里之前都是用正则,几行行代码就搞定了,所以也想用正则,写了几个匹配规则但是都不匹配取不出来,正则还是不会用
直接找个xml 解析库解析就好了。
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();
其实有个简单的方法,不管是java还是C++,你只需要找到规律。比如你想取id和desc这个字段,你就找到<desc id=>这个字段,然后查值。这个以后你写爬虫也会遇到。欢迎采纳
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();
linqtoxml