5

Child Nodesすべてのタグを読み取る必要があります<Imovel>。問題は<Imovel>、XMLファイルに複数のタグがあり、各タグの違いは<Imovel>IDと呼ばれる属性であるということです。

これは例です

<Imoveis>
   <Imovel id="555">
      <DateImovel>2012-01-01 00:00:00.000</DateImovel>
      <Pictures>
          <Picture>
              <Path>hhhhh</Path>
          </Picture>
      </Pictures>
      // Here comes a lot of another tags
   </Imovel>
   <Imovel id="777">
      <DateImovel>2012-01-01 00:00:00.000</DateImovel>
      <Pictures>
          <Picture>
              <Path>tttt</Path>
          </Picture>
      </Pictures>
      // Here comes a lot of another tags
   </Imovel>
</Imoveis>

各タグのすべてのタグを読み取る必要があり、タグで<Imovel>行う各検証の最後に、<Imovel>別の検証を行う必要があります。

だから、私は2(2)foreachまたはaforとaをする必要があると思いますforeach、私はよく理解していませんLINQが、私のサンプルに従ってください

XmlReader rdr = XmlReader.Create(file);
XDocument doc2 = XDocument.Load(rdr);
ValidaCampos valida = new ValidaCampos();

//// Here I Count the number of `<Imovel>` tags exist in my XML File                        
for (int i = 1; i <= doc2.Root.Descendants().Where(x => x.Name == "Imovel").Count(); i++)
{
    //// Get the ID attribute that exist in my `<Imovel>` tag
    id = doc2.Root.Descendants().ElementAt(0).Attribute("id").Value;

    foreach (var element in doc2.Root.Descendants().Where(x => x.Parent.Attribute("id").Value == id))
    {
       String name = element.Name.LocalName;
       String value = element.Value;
    }
}

foreachしかし、私のステートメントでは、私の<Picture>タグである彼女の親タグにID属性がないため、うまく機能しません。

誰かが私がこの方法をするのを手伝ってくれる?

4

2 に答える 2

8

これは、2つのforeachステートメントで実行できるはずです。

foreach(var imovel in doc2.Root.Descendants("Imovel"))
{
  //Do something with the Imovel node
  foreach(var children in imovel.Descendants())
  {
     //Do something with the child nodes of Imovel.
  }
}
于 2012-08-16T19:15:54.677 に答える
1

これを試して。System.Xml.XPathは、xpathセレクターをXElementに追加します。xpathを使用すると、要素の検索がはるかに迅速かつ簡単になります。

ファイルをロードするのにXmlReaderとXDocumentは必要ありません。

XElement root = XElement.Load("test.xml");

foreach (XElement imovel in root.XPathSelectElements("//Imovel"))
{
  foreach (var children in imovel.Descendants())
  {
     String name = children.Name.LocalName;
     String value = children.Value;

     Console.WriteLine("Name:{0}, Value:{1}", name, value);
  }

   //use relative xpath to find a child element
   XElement picturePath = imovel.XPathSelectElement(".//Pictures/Picture/Path");
   Console.WriteLine("Picture Path:{0}", picturePath.Value);
}

含めてください

System.Xml.XPath;
于 2014-11-29T01:12:48.887 に答える