以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  我想取出所有ip的内容,而不需要IP子节点下的内容,如何取(vs2003 c#语言)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=48548)


--  作者:chinesechen
--  发布时间:6/15/2007 2:21:00 PM

--  我想取出所有ip的内容,而不需要IP子节点下的内容,如何取(vs2003 c#语言)
<?xml version="1.0" encoding="GB2312"?>
<PLAN>
   <IP>192.168.0.109
        <week>0
            <StartTime>00:00</StartTime>
            <EndTime>23:59</EndTime>
            <Alarm>0</Alarm>
       </week>
        <week>1
            <StartTime>23:00</StartTime>
           <EndTime>23:59</EndTime>
           <Alarm>1</Alarm>
        </week>
       <week>2
                 <StartTime>22:00</StartTime>
  <EndTime>23:59</EndTime>
  <Alarm>1</Alarm></week>
       <week>3
                <StartTime>21:00</StartTime>
 <EndTime>23:59</EndTime>
 <Alarm>1</Alarm></week>
       <week>4
                 <StartTime>20:00</StartTime>
  <EndTime>23:59</EndTime>
 <Alarm>1</Alarm></week>
        <week>5
                 <StartTime>19:00</StartTime>
 <EndTime>23:59</EndTime>
 <Alarm>1</Alarm></week>
       <week>6
                 <StartTime>18:00</StartTime>
 <EndTime>23:59</EndTime>
 <Alarm>1</Alarm></week>
   </IP>
   <IP>192.168.0.110</IP>
   <IP>192.168.0.111</IP>
   <IP>192.168.0.112</IP>
   <IP>192.168.0.113</IP>
   <IP>192.168.0.114</IP>
</PLAN>
请问,我想取出所有ip,放入arraylist数组,该怎么取,vs2003 c#语言

[此贴子已经被作者于2007-6-15 15:01:05编辑过]

--  作者:Qr
--  发布时间:6/15/2007 6:43:00 PM

--  
这是偶帮人解决过的一个问题,眼熟吧:
XML:
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
  <book>The Handmaid's Tale
    <price>19.95</price>
  </book>
  <book>Pride And Prejudice
    <price>24.95</price>
  </book>
</bookstore>

CS:
XmlNodeList oNode = xmldoc.SelectNodes("//book");

foreach(XmlElement deptNode in oNode){
 Console.Write("{0}", deptNode.FirstChild.InnerText);
}


--  作者:chinesechen
--  发布时间:6/22/2007 3:22:00 PM

--  
谢谢,真的很简单,比我现在用的方便多了,但是我想问下,如果生成这样格式的XML了,比如说在增加一个<price></price>节点
--  作者:Qr
--  发布时间:6/22/2007 3:48:00 PM

--  
CreateElement()//创建新节点
InnerText//赋值
AppendChild()//添加刚创建的节点
--  作者:chinesechen
--  发布时间:6/22/2007 5:11:00 PM

--  
我是这样做的:
foreach(XmlElement deptNode in oNode)
{
   temp=deptNode.FirstChild.InnerText;
   if(temp=="ee")
  {
     XmlElement xesub1=xmlDoc.CreateElement("Num");
     xesub1.InnerText="999999999";
     root.AppendChild(xesub1);
     xmlDoc.Save(MapPath(strfilename));  
     break;
    }
}
XML文件是:
<?xml version="1.0" encoding="GB2312"?>
<Handset>
    <IP>aa
         <Num>111111111</Num>
        <Num>423</Num>
        <Num>11112222</Num></IP>
  <IP>bb
        <Num>2222222222222</Num></IP>
  <IP>cc
        <Num>1</Num></IP>
<IP>dd
        <Num>1654654654654</Num></IP>
<IP>ee<IP>
<IP>ff<IP>
</Handset>
为什么增加的节点全部跑到第一个aa这个IP下面去了我想加到ee这个节点下


--  作者:Qr
--  发布时间:6/23/2007 12:19:00 PM

--  
foreach(XmlElement deptNode in oNode)
{
   temp=deptNode.FirstChild.InnerText;
   if(temp=="ee")//temp永远不会等于ee,你可以输出temp的长度试试
  {
     XmlElement xesub1=xmlDoc.CreateElement("Num");
     xesub1.InnerText="999999999";
     root.AppendChild(xesub1);//这里应该是deptNode,而不是root吧
     xmlDoc.Save(MapPath(strfilename));  
     break;
    }
}
按偶指出的错出修正,会得到正确的结果的。
--  作者:chinesechen
--  发布时间:6/26/2007 10:25:00 AM

--  
最简单的办法是这样的:
objParentNode = objDoc.SelectSingleNode("Handset/ip[text()=ee]").ParentNode
objNodeChild = objDoc.CreateElement("Num")
objNodeChild.InnerXml = "222222"
objParentNode.AppendChild(objNodeChild)
哈哈,是不是很简单啊!

--  作者:Qr
--  发布时间:6/26/2007 10:33:00 AM

--  
foreach(XmlElement deptNode in oNode)要遍历所用节点,就你的XML而言,当然不如用SelectSingleNode(),但各有长处。



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
66.406ms