2013-09-24 37 views
1

我有一个XML的以下文件级块通过XML循环并删除每个第10个节点实例 - 如何?

<?xml version="1.0" encoding="utf-8"?> 
<TenDayWeather> 
    <TenDay ID="B3_7187"> 
    <TenDayData> 
     <Day>FRI 9</Day> 
     <MinTemp>4°C</MinTemp> 
     <MaxTemp>10°C</MaxTemp> 
     <Icon>Rain</Icon> 
     <IsWeekday>true</IsWeekday> 
    </TenDayData> 
    <TenDayData> 
     <Day>SAT 10</Day> 
     <MinTemp>6°C</MinTemp> 
     <MaxTemp>15°C</MaxTemp> 
     <Icon>Fewshowers</Icon> 
     <IsWeekday>false</IsWeekday> 
    </TenDayData> 
    <TenDayData> 
     <Day>SUN 11</Day> 
     <MinTemp>4°C</MinTemp> 
     <MaxTemp>15°C</MaxTemp> 
     <Icon>Fewshowers</Icon> 
     <IsWeekday>false</IsWeekday> 
    </TenDayData> 
    <TenDayData> 
     <Day>MON 12</Day> 
     <MinTemp>5°C</MinTemp> 
     <MaxTemp>14°C</MaxTemp> 
     <Icon>Rain</Icon> 
     <IsWeekday>true</IsWeekday> 
    </TenDayData> 
    <TenDayData> 
     <Day>TUE 13</Day> 
     <MinTemp>2°C</MinTemp> 
     <MaxTemp>13°C</MaxTemp> 
     <Icon>Fewshowers</Icon> 
     <IsWeekday>true</IsWeekday> 
    </TenDayData> 
    <TenDayData> 
     <Day>WED 14</Day> 
     <MinTemp>3°C</MinTemp> 
     <MaxTemp>14°C</MaxTemp> 
     <Icon>Fewshowers</Icon> 
     <IsWeekday>true</IsWeekday> 
    </TenDayData> 
    <TenDayData> 
     <Day>THU 15</Day> 
     <MinTemp>3°C</MinTemp> 
     <MaxTemp>16°C</MaxTemp> 
     <Icon>Fine</Icon> 
     <IsWeekday>true</IsWeekday> 
    </TenDayData> 
    <TenDayData> 
     <Day>FRI 16</Day> 
     <MinTemp>5°C</MinTemp> 
     <MaxTemp>16°C</MaxTemp> 
     <Icon>Cloudy</Icon> 
     <IsWeekday>true</IsWeekday> 
    </TenDayData> 
    <TenDayData> 
     <Day>SAT 17</Day> 
     <MinTemp>8°C</MinTemp> 
     <MaxTemp>16°C</MaxTemp> 
     <Icon>Rain</Icon> 
     <IsWeekday>false</IsWeekday> 
    </TenDayData> 
    <TenDayData> 
     <Day>SUN 18</Day> 
     <MinTemp>4°C</MinTemp> 
     <MaxTemp>13°C</MaxTemp> 
     <Icon>Showers</Icon> 
     <IsWeekday>false</IsWeekday> 
    </TenDayData> 
    </TenDay> 
    <TenDay ID="B3_11194"> 
    <TenDayData> 

etc etc, repeats some 250 times with a different TenDay ID 


    </TenDay> 
</TenDayWeather> 

这仅仅是一个堆的一个(250左右)的这些段,我需要遍历和删除TenDayData的”每第十节点实例的”。每个组中只有10个'TenDayData'实例,所以我需要每次删除最后一个。

这样做的最好方法是什么? 我对XmlDocument和XmlTextReader中的dot net childNodes很熟悉,但无法弄清楚如何区分10个子节点而不使用ForNext循环和一个听起来不像正确方法的计数器。

任何线索任何人

我使用vb.net,但可以读取大多数c#。

顺便提一下,这是我正在玩的代码。

  Dim reader As New XmlTextReader(fSourceXmlPath & xmlFileName) 
      Dim doc As XmlDocument = New XmlDocument() 
      doc.Load(reader) 
      reader.Close() 

      Dim childNode As XmlNode 
      Dim nodeList As XmlNodeList 
      Dim iNode As Integer = 0 

      nodeList = doc.GetElementsByTagName("//TenDayWeather/TenDay[@ID='B3_7187']") 
      Console.Write(nodeList.Count.ToString) 
      For Each node As XmlElement In nodeList 
       iNode += 1 
       If iNode = 10 Then 
        Console.WriteLine(node("TenDayData").InnerText) 
        childNode = doc.SelectSingleNode("//TenDayWeather/TenDay[@ID='B3_7187']/TenDayData") 
        childNode.ParentNode.RemoveChild(childNode) 
       End If 
      Next 

      doc.Save(fSourceXmlPath & xmlFileName) 

不幸的是,从来没有任何nodeList.count值。

感谢

回答

1

无法得到解决的LINQ(感谢scartag)头,因为我已经有一堆的XmlDocument代码到位,我坚持了下来。 这就是我最终决定的 - 也许它会帮助别人。

  Dim iNode As Integer 
      For Each xn As XmlNode In doc.SelectNodes("//TenDayWeather/TenDay") 
       For Each childNode As XmlNode In xn.SelectNodes("TenDayData") 
        If childNode IsNot Nothing Then 
         iNode += 1 
         If iNode = 10 Then 
          childNode.ParentNode.RemoveChild(childNode) 
          iNode = 0 
         End If 
        End If 
       Next 
      Next 
      Console.Write("Deleted tenth day data." + vbNewLine)