Как вставить элемент итерации в файл XMl, используя C # .net? - PullRequest
0 голосов
/ 19 ноября 2010

Я хочу вставить элементы итерации (Сигнал) в соответствии с моим требованием, как показано ниже: вывод XML.

    <?xml version="1.0" encoding="UTF-8"?>
    <WIUConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <Timestamp>2006-05-04T18:13:51.0Z</Timestamp>
      <WIUAddress>WIUAddress0</WIUAddress>
      <WIUName>WIUName0</WIUName>
      <BeaconFlag>Y</BeaconFlag>
      <EncryptedHMACkey>30</EncryptedHMACkey>
      <DeviceStatusConfigVersion>DeviceStatusConfigVersion0</DeviceStatusConfigVersion>
      <Signal>
        <SiteDeviceId>SiteDeviceId0</SiteDeviceId>
        <SiteName>SiteName0</SiteName>
        <TrackName>TrackName0</TrackName>
      </Signal>
      <Signal>
        <SiteDeviceId>SiteDeviceId1</SiteDeviceId>
        <SiteName>SiteName1</SiteName>
        <TrackName>TrackName1</TrackName>
      </Signal>
      <Signal>
      .
      .
      .
      </Signal>
   </WIUConfig>

как я могу реализовать эту концепцию итерации, используя C # .net LINQ to XML

Вот мой код:

                XDocument xdco = new XDocument(
                new XDeclaration("1.0", "utf-8", "Yes"),
                new XComment("WIU Configurations"),
                new XElement("WIUConfig",
                    new XElement("Timestamp", datetime),
                    new XElement("WIUAddress", ds.Tables[0].Rows[0][0].ToString()),
                    new XElement("WIUName", ds.Tables[0].Rows[0][1].ToString()),
                    new XElement("BeaconFlag", "Y"),
                    new XElement("EncryptedHMACkey", ds1.Tables[0].Rows[0][0].ToString()),
                    new XElement("DeviceStatusConfigSCAC", ds.Tables[0].Rows[0][0].ToString()),
                    new XElement("DeviceStatusConfigTableId", ds.Tables[0].Rows[0][0].ToString()),
                    new XElement("DeviceStatusConfigVersion", ds.Tables[0].Rows[0][0].ToString()),

                    **????????(iteration code) **

                    ));

xdco.Save(OutPath);

код сверху, как вставить элемент итерации с XML-файлом?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Вы не показали, что у вас есть с точки зрения данных сигнала, но вы должны быть в состоянии сделать что-то подобное, сразу после вашей последней существующей строки new XElement:

signals.Select(signal => new XElement("Signal",
    new XElement("SiteDeviceId", signal.SiteDeviceId),
    new XElement("SiteName", signal.SiteName),
    new XElement("TrackName", signal.TrackName)
))

LINQXML достаточно умен, чтобы использовать параметры, которые оказываются итеративными.Это один из способов, которым он очень хорошо интегрируется с остальной частью LINQ.

РЕДАКТИРОВАТЬ: Судя по вашим комментариям, у вас уже есть данные, но в DataTable.Вы все еще можете применить тот же подход, используя DataTable.AsEnumerable().Select(row => ...), но лично я бы настоятельно рекомендовал сначала преобразовать его в строго типизированную коллекцию, чтобы сделать код простым и понятным.

0 голосов
/ 19 ноября 2010

Вы можете создать из него промежуточную коллекцию «Бизнес-объектов», а затем просто использовать DataContractSerializer для ее сериализации.

...