LINQ для чтения XML

Думаю, если я прав, вы хотите вставить значения в столбец Identity. Вы можете сделать это следующим образом.

Create table MyTable (Id int identity(1, 1), Name Varchar(20))

Set identity_insert MyTable on
insert MyTable(Id, Name) values (1 , 'A'), (2, 'B')

Select * from MyTable
188
задан John Saunders 14 September 2011 в 05:57
поделиться

4 ответа

Попробуйте это.

void Main()
{
    StringBuilder result = new StringBuilder();

    //Load xml
    XDocument xdoc = XDocument.Load("data.xml");

    //Run query
    var lv1s = from lv1 in xdoc.Descendants("level1")
               select new { 
                   Header = lv1.Attribute("name").Value,
                   Children = lv1.Descendants("level2")
               };

    //Loop through results
    foreach (var lv1 in lv1s){
            result.AppendLine(lv1.Header);
            foreach(var lv2 in lv1.Children)
                 result.AppendLine("     " + lv2.Attribute("name").Value);
    }

    Console.WriteLine(result);
}
219
ответ дан Simone Buralli 23 November 2019 в 05:43
поделиться

Или, если Вы хотите более общий подход - т.е. для вложения до "levelN":

void Main()
{
    XElement rootElement = XElement.Load(@"c:\events\test.xml");

    Console.WriteLine(GetOutline(0, rootElement));  
}

private string GetOutline(int indentLevel, XElement element)
{
    StringBuilder result = new StringBuilder();

    if (element.Attribute("name") != null)
    {
        result = result.AppendLine(new string(' ', indentLevel * 2) + element.Attribute("name").Value);
    }

    foreach (XElement childElement in element.Elements())
    {
        result.Append(GetOutline(indentLevel + 1, childElement));
    }

    return result.ToString();
}
53
ответ дан dommer 23 November 2019 в 05:43
поделиться

Несколько простые foreach циклы предоставляют чистое решение:

foreach (XElement level1Element in XElement.Load("data.xml").Elements("level1"))
{
    result.AppendLine(level1Element.Attribute("name").Value);

    foreach (XElement level2Element in level1Element.Elements("level2"))
    {
        result.AppendLine("  " + level2Element.Attribute("name").Value);
    }
}
21
ответ дан Amirhossein Mehrvarzi 23 November 2019 в 05:43
поделиться
XDocument xdoc = XDocument.Load("data.xml");
var lv1s = xdoc.Root.Descendants("level1"); 
var lvs = lv1s.SelectMany(l=>
     new string[]{ l.Attribute("name").Value }
     .Union(
         l.Descendants("level2")
         .Select(l2=>"   " + l2.Attribute("name").Value)
      )
    );
foreach (var lv in lvs)
{
   result.AppendLine(lv);
}

пз. Необходимо использовать.Root на любой из этих версий.

8
ответ дан eglasius 23 November 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: