Можно ли создать следующий XML с помощью Xdocument и добавить соответствующий проект в последующем переходе (C # 3.0) - PullRequest
0 голосов
/ 03 июня 2010
<?xml version='1.0' encoding='UTF-8'?>  
<StockMarket>
    <StockDate Day = "02" Month="06" Year="2010"> 
        <Stock>     
            <Symbol>ABC</Symbol>                    
            <Amount>110.45</Amount>
        </Stock>
        <Stock>
            <Symbol>XYZ</Symbol>                
            <Amount>366.25</Amount>
        </Stock>
    </StockDate>
    <StockDate Day = "03" Month="06" Year="2010"> 
        <Stock>     
            <Symbol>ABC</Symbol>                
            <Amount>110.35</Amount>
        </Stock>
        <Stock>
            <Symbol>XYZ</Symbol>                
            <Amount>369.70</Amount>
        </Stock>
    </StockDate>
</StockMarket>

Мой подход пока

     XDocument doc =
  new XDocument(
    new XElement("StockMarket",
      new XElement("StockDate", new XAttribute("Day", "02"),new XAttribute("Month","06"),new XAttribute("Year","2010")),
      new XElement("Stock", new XElement("Symbol", "ABC"), new XElement("Amount", "110.45"))
      )
    );

Поскольку я новичок в Linq для XML, в настоящее время я очень много борюсь и отныне ищу помощи.

Что мне нужно, так это генерировать вышеупомянутый XML программно (я имею в виду, что какой-то цикл ...) Значения будут переданы из текстового поля и, следовательно, будут заполнены во время выполнения.

В настоящее время то, что я сделал, является своего рода статичным. Весь этот материал должен быть сделан во время выполнения.

Еще одна проблема, с которой я сталкиваюсь, - это сохранение записи во второй раз.

Предположим, я впервые выполнил код и сохранил его (используя программу, которую я сделал). В следующий раз, когда я попытаюсь сохранить только тогда

<StockDate Day = "xx" Month="xx" Year="xxxx"> 
            <Stock>     
                <Symbol>ABC</Symbol>                    
                <Amount>110.45</Amount>
            </Stock>
            <Stock>
                <Symbol>XYZ</Symbol>                
                <Amount>366.25</Amount>
            </Stock>
        </StockDate>

должен быть сохранен (или лучше добавлен), а не <StockMarket> .... </StockMarket>.., потому что он будет создан только в первый раз, когда будет сгенерирован или создан XML.

Я надеюсь, что смогу правильно передать мою проблему. Если вам, людям, трудно понять мою ситуацию, пожалуйста, дайте мне знать.

Использование C # 3.0.

Спасибо

1 Ответ

1 голос
/ 03 июня 2010

Вы можете добавить элементы и атрибуты, как только документ будет создан достаточно просто:

XDocument doc = /* what you had already */

// get the "<StockMarket>" element
var stockMarketElem = doc.Element("StockMarket");

// add a new StockDate to it in a loop
for(var dt = new DateTime(2010, 1, 1); dt <= new DateTime(2010, 6, 1); dt = dt.AddDays(1))
{
    stockMarketElem.Add(
      new XElement("StockDate",
        new XAttribute("Day", dt.Day), new XAttribute("Month", dt.Month), ...
    );
}

Кроме того, чтобы добавить новые элементы после сохранения файла, вы можете загрузить его обратно с помощью XDocument.Load , а затем использовать то же, что и выше, чтобы добавить новые акции в конец, прежде чем сохранить его снова.

Если вы ожидаете, что файл станет довольно большим, то XML может быть не лучшим вариантом, но если вы не ожидаете слишком большого количества данных, тогда, вероятно, все в порядке.

...