C#取XML节点值的问题

PeterSong9970 2009-09-15 09:40:56
C#取XML节点

里面很多节点,层次很乱,而且格式不固定,比如说我想先取节点table下的td节点的数据内容(这个td的层次也不固定),应该怎么写?

我发现XmlNode没有GetElementsByTagName()函数啊。
...全文
318 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
除错,就靠你自己了。俺负责完成你的要求。:D

如果城市下必然有此节点, 那么, node.selectsinlenode("穿衣指数");

大致如此。
PeterSong9970 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 spg2003 的回复:]
SelectNodes("//城市");

这个方法是不是只对XmlDoc起作用,对node就没作用了?
[/Quote]

node.SelectSingleNode("//穿衣指数");

这么用是不是有问题?就是这里取不到正确的值。

node是一个节点,下面只会有一个“穿衣指数”节点,所以我用了SelectSingleNode()。
xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
NO, 对node一样有效。

我是用网页写的,如果你是SOFT,那么。

List<string> levelList = new List<string>();
foreach(System.Xml.XmlNode node in list)
{
levelList.add(node.FirstChild.Value.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries)[0]);
}

填入List,你再处理好了。如果要加城市名, 你可以用List<string[]>, 也可以用Dic.
PeterSong9970 2009-09-15
  • 打赏
  • 举报
回复
SelectNodes("//城市");

这个方法是不是只对XmlDoc起作用,对node就没作用了?
PeterSong9970 2009-09-15
  • 打赏
  • 举报
回复
Response是什么?
PeterSong9970 2009-09-15
  • 打赏
  • 举报
回复
我在用C#写个程序来处理XML数据。
xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
你是说SOFT吧?
xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
我写的不是C#?
PeterSong9970 2009-09-15
  • 打赏
  • 举报
回复
C#如何实现?
xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
。。。。

System.Xml.XmlNodeList list = doc.SelectNodes("//产品//穿衣指数");

foreach(System.Xml.XmlNode node in list)
{
Response.Write(node.FirstChild.Value.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries)[0]);
Response.Write("<br/>");
}
PeterSong9970 2009-09-15
  • 打赏
  • 举报
回复
我想要得到的是 每个城市的穿衣指数的等级值。

xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
想要什么结果?
PeterSong9970 2009-09-15
  • 打赏
  • 举报
回复
<产品>
<指数预报>
<城市 名称="54511">
<预报 起报时间="2008-04-02 08:00:00">
<穿衣指数>6级 凉 天气凉,建议着厚外套加毛衣等春秋服装。体弱者宜着大衣、呢外套。因昼夜温差较大,注意增减衣服。</穿衣指数>
<雨伞指数>1级 不带伞 天气晴好,阳光明媚,您在出门的时候无须带雨伞。</雨伞指数>
<晾晒指数>3级 基本适宜 天气晴朗,午后温暖的阳光仍能满足你驱潮消霉杀菌的晾晒需求。</晾晒指数>
<逛街指数>2级 较不宜 天气晴朗,阳光灿烂,但风力很大,较不适宜逛街,若坚持出门,请选择避风地点,采取适当防风措施。</逛街指数>
<紫外线强度指数>3级 中等 属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。</紫外线强度指数>
<晨练指数>2级 较适宜 早晨气象条件较适宜晨练,但风力稍大,晨练时请注意选择避风的地点,避免迎风锻炼。</晨练指数>
<啤酒指数>2级 较不适宜 您将会感到有些凉意,建议饮用常温啤酒,并少量饮用为好。</啤酒指数>
<空调开启指数>5级 开启制暖空调 您将感到有些冷,可以适当开启制暖空调调节室内温度,以免着凉感冒。</空调开启指数>
<舒适度指数>6级 较舒适 白天天气晴好但风力较强,早晚会感觉偏凉,午后舒适、宜人。</舒适度指数>
<洗车指数>2级 较适宜 较适宜洗车,未来持续两天无雨,但考虑风力较大,擦洗一新的汽车会蒙上灰尘。</洗车指数>
<感冒指数>3级 易发 天冷风大且昼夜温差也很大,易发生感冒,请注意适当增减衣服。</感冒指数>
<中暑指数>0级 无 温度不高,其他各项气象条件适宜,中暑机率极低。</中暑指数>
<污染条件指数>2级 良 气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。</污染条件指数>
<旅游指数>3级 一般 晴天,天凉,加上4到5级的风,将给您的旅游带来些不便,旅游指数一般,建议您有选择性地到一些景点游玩。</旅游指数>
<风寒指数></风寒指数>
</预报>
</城市>
<城市 名称="54527">
<预报 起报时间="2008-04-02 08:00:00">
<穿衣指数>6级 凉 天气凉,建议着厚外套加毛衣等春秋服装。体弱者宜着大衣、呢外套。因昼夜温差较大,注意增减衣服。</穿衣指数>
<雨伞指数>1级 不带伞 天气晴好,阳光明媚,您在出门的时候无须带雨伞。</雨伞指数>
<晾晒指数>4级 不太适宜 风太大,不太适宜晾晒,如果非晾晒不可,请注意选择防风的地点晾晒并夹牢衣物。</晾晒指数>
<逛街指数>2级 较不宜 天气晴朗,阳光灿烂,但风力很大,较不适宜逛街,若坚持出门,请选择避风地点,采取适当防风措施。</逛街指数>
<紫外线强度指数>3级 中等 属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。</紫外线强度指数>
<晨练指数>3级 较不宜 风力较大,较不宜晨练,建议年老体弱人群适当减少晨练时间,若坚持室外锻炼,请选择避风的地点。</晨练指数>
<啤酒指数>2级 较不适宜 您将会感到有些凉意,建议饮用常温啤酒,并少量饮用为好。</啤酒指数>
<空调开启指数>5级 开启制暖空调 您将感到有些冷,可以适当开启制暖空调调节室内温度,以免着凉感冒。</空调开启指数>
<舒适度指数>6级 较舒适 白天天气晴好但风力较强,早晚会感觉偏凉,午后舒适、宜人。</舒适度指数>
<洗车指数>2级 较适宜 较适宜洗车,未来持续两天无雨,但考虑风力较大,擦洗一新的汽车会蒙上灰尘。</洗车指数>
<感冒指数>3级 易发 天冷风大且昼夜温差也很大,易发生感冒,请注意适当增减衣服。</感冒指数>
<中暑指数>0级 无 温度不高,其他各项气象条件适宜,中暑机率极低。</中暑指数>
<污染条件指数>1级 优 气象条件非常有利于空气污染物稀释、扩散和清除,可在室外正常活动。</污染条件指数>
<旅游指数>4级 较不宜 大风天气可能会对您的出行造成影响,较不适宜外出旅游,外出时请注意防风呦!</旅游指数>
<风寒指数></风寒指数>
</预报>
</城市>
xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
贴XML片断,以及你想要的结果。
PeterSong9970 2009-09-15
  • 打赏
  • 举报
回复
string CityNo;
string IndexVal;
//
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filename);
//根据指定路径获取节点
XmlNodeList nds = xmlDoc.SelectNodes("//城市");
if (nds.Count > 0)
{
foreach (XmlNode nd in nds)
{
CityNo = nd.Attributes["名称"].Value;
num = CityNo;
XmlNode node = nd.SelectSingleNode("//穿衣指数");
if (node.InnerText != "")
{
IndexVal = node.InnerText.Substring(0, 1);
MessageBox.Show(CityNo + ":" + IndexVal);
}
}
}

我这段代码的结果不对,IndexVal = node.InnerText.Substring(0, 1);得到的值不正确。
xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
selectNodes("//table//td");
duanfengo7 2009-09-15
  • 打赏
  • 举报
回复
学习.
xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
错了,我试试先。
xie_yanke 2009-09-15
  • 打赏
  • 举报
回复
selectNodes("//table/td");
PeterSong9970 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xie_yanke 的回复:]
selectNodes("//td"); //取所有td所点集合
[/Quote]

我要取table下的td,不是全部的。
加载更多回复(3)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧