读取XML文件,就像父元素不存在一样

时间:2014-08-16 12:38:26

标签: c# xml

我正在阅读一个XML文件,其中列出了天气的预测时间步长。预测分为几天,其中包含几个时间步骤。我想一次阅读所有的时间步骤,而不是每次都经历,我该怎么做?这是我正在阅读的XML:

<Location i="3808" lat="50.218" lon="-5.33" name="CAMBORNE" country="ENGLAND" continent="EUROPE" elevation="87.0">
  <Period type="Day" value="2014-08-16Z">
    <Rep D="WSW" F="11" G="18" H="91" Pp="0" S="4" T="11" V="VG" W="1" U="1">360</Rep>
    <Rep D="WNW" F="15" G="11" H="73" Pp="1" S="9" T="16" V="VG" W="3" U="1">540</Rep>
    <Rep D="WNW" F="14" G="18" H="66" Pp="3" S="13" T="17" V="VG" W="3" U="4">720</Rep>
    <Rep D="W" F="15" G="18" H="67" Pp="5" S="13" T="17" V="VG" W="7" U="5">900</Rep>
    <Rep D="W" F="13" G="20" H="75" Pp="34" S="13" T="16" V="VG" W="7" U="1">1080</Rep>
    <Rep D="WSW" F="12" G="18" H="83" Pp="7" S="9" T="14" V="VG" W="7" U="0">1260</Rep>
  </Period>
  <Period type="Day" value="2014-08-17Z">
    <Rep D="W" F="12" G="20" H="83" Pp="38" S="11" T="14" V="VG" W="7" U="0">0</Rep>
    <Rep D="W" F="12" G="18" H="85" Pp="8" S="11" T="14" V="VG" W="7" U="0">180</Rep>
    <Rep D="W" F="12" G="20" H="86" Pp="53" S="11" T="14" V="VG" W="12" U="1">360</Rep>
    <Rep D="WNW" F="13" G="22" H="79" Pp="30" S="16" T="16" V="VG" W="7" U="1">540</Rep>
    <Rep D="WNW" F="13" G="25" H="87" Pp="53" S="16" T="16" V="GO" W="10" U="4">720</Rep>
    <Rep D="NW" F="14" G="25" H="66" Pp="7" S="16" T="17" V="VG" W="3" U="3">900</Rep>
    <Rep D="WNW" F="13" G="22" H="67" Pp="1" S="13" T="16" V="VG" W="1" U="2">1080</Rep>
    <Rep D="WNW" F="12" G="16" H="79" Pp="1" S="9" T="14" V="VG" W="2" U="0">1260</Rep>
  </Period>
  <Period type="Day" value="2014-08-18Z">
    ...
  </Period>
</Location>

以下是我想要阅读的内容,但我不想更改文件本身:

<Location i="3808" lat="50.218" lon="-5.33" name="CAMBORNE" country="ENGLAND" continent="EUROPE" elevation="87.0">
  <Rep D="WSW" F="11" G="18" H="91" Pp="0" S="4" T="11" V="VG" W="1" U="1">360</Rep>
  <Rep D="WNW" F="15" G="11" H="73" Pp="1" S="9" T="16" V="VG" W="3" U="1">540</Rep>
  <Rep D="WNW" F="14" G="18" H="66" Pp="3" S="13" T="17" V="VG" W="3" U="4">720</Rep>
  <Rep D="W" F="15" G="18" H="67" Pp="5" S="13" T="17" V="VG" W="7" U="5">900</Rep>
  <Rep D="W" F="13" G="20" H="75" Pp="34" S="13" T="16" V="VG" W="7" U="1">1080</Rep>
  <Rep D="WSW" F="12" G="18" H="83" Pp="7" S="9" T="14" V="VG" W="7" U="0">1260</Rep>
  <Rep D="W" F="12" G="20" H="83" Pp="38" S="11" T="14" V="VG" W="7" U="0">0</Rep>
  <Rep D="W" F="12" G="18" H="85" Pp="8" S="11" T="14" V="VG" W="7" U="0">180</Rep>
  <Rep D="W" F="12" G="20" H="86" Pp="53" S="11" T="14" V="VG" W="12" U="1">360</Rep>
  <Rep D="WNW" F="13" G="22" H="79" Pp="30" S="16" T="16" V="VG" W="7" U="1">540</Rep>
  <Rep D="WNW" F="13" G="25" H="87" Pp="53" S="16" T="16" V="GO" W="10" U="4">720</Rep>
  <Rep D="NW" F="14" G="25" H="66" Pp="7" S="16" T="17" V="VG" W="3" U="3">900</Rep>
  <Rep D="WNW" F="13" G="22" H="67" Pp="1" S="13" T="16" V="VG" W="1" U="2">1080</Rep>
  <Rep D="WNW" F="12" G="16" H="79" Pp="1" S="9" T="14" V="VG" W="2" U="0">1260</Rep>
  ...
</Location>

我不想经历所有时期,然后经历每个时段内的所有代表,我只是想立即获得所有代表。例如,我想这样做:

foreach(rep in location)

而不是:

foreach(period in location)
  foreach(rep in period)

不编辑文件。另外,如果我这样做,我怎样才能找出代表来自哪个时期?感谢

2 个答案:

答案 0 :(得分:0)

如果您使用Linq to XML,您可以使用Descendants方法选择这样的Rep个节点:

var reps = xml.Descendants("Rep");

答案 1 :(得分:0)

这对我有用,循环遍历节点。

        var doc = new XDocument(XDocument.Load("XML.xml"));
        foreach (var item in doc.Descendants("Rep"))
        {
            // Do something with the node
        }
相关问题