преобразовать набор данных во вложенный xml ??? Помогите мне - PullRequest
0 голосов
/ 22 марта 2020

У меня есть 1 набор данных с именем «Счета-фактуры» из 2-х данных, данные взяты с sql server 2008. Игнорируя данные из базы данных, я сосредотачиваюсь на наборе данных, экспортированном в xml. Дата 1 с именем Счет-фактура включает в себя OrderID, CustomerID, CustomerName, CustomerPhone. Datatable 2, названный Products, включает ProductID, OrderID, ProductName, цену, количество, сумму.
Мой вопрос, я хочу получить этот вывод,

<Invoices>
    <OrderID>1</OrderID>
    <Invoice>
        <CustomerID>1</CustomerID>
        <CustomerName>A</CustomerName>
        <CustomerPhone>123</CustomerPhone>
        <Products>
            <Product>
                <ProductID>1</ProductID>
                <ProductName>C</ProductName>
                <Price>10</Price>
                <Quantity>2</Quantity>
                <Amount>20</Amount>
            </Product>
        </Products>
        <TotalAmount>20</TotalAmount> --TotalAmount = sum(amount of products)
    </Invoice>
    <OrderID>2</OrderID>
    <Invoice>
        <CustomerID>3</CustomerID>
        <CustomerName>D</CustomerName>
        <CustomerPhone>1789</CustomerPhone>
        <Products>
            <Product>
                <ProductID>5</ProductID>
                <ProductName>V</ProductName>
                <Price>30</Price>
                <Quantity>3</Quantity>
                <Amount>90</Amount>
            </Product>
            <Product>
                <ProductID>9</ProductID>
                <ProductName>Z</ProductName>
                <Price>5</Price>
                <Quantity>4</Quantity>
                <Amount>20</Amount>
            </Product>
        </Products>
        <TotalAmount>110</TotalAmount> --TotalAmount = sum(amount of products)
    </Invoice>      
</Invoices>

Но я получаю этот вывод:

<Invoices>
    <OrderID>1</OrderID>
    <Invoice>
        <CustomerID>1</CustomerID>
        <CustomerName>A</CustomerName>
        <CustomerPhone>123</CustomerPhone>      
        <TotalAmount>20</TotalAmount> --TotalAmount = sum(amount of products)
        <Products>
            <Product>
                <ProductID>1</ProductID>
                <ProductName>C</ProductName>
                <Price>10</Price>
                <Quantity>2</Quantity>
                <Amount>20</Amount>
            </Product>
        </Products>
    </Invoice>
    <OrderID>2</OrderID>
    <Invoice>
        <CustomerID>3</CustomerID>
        <CustomerName>D</CustomerName>
        <CustomerPhone>1789</CustomerPhone>     
        <TotalAmount>110</TotalAmount> --TotalAmount = sum(amount of products)
        <Products>
            <Product>
                <ProductID>5</ProductID>
                <ProductName>V</ProductName>
                <Price>30</Price>
                <Quantity>3</Quantity>
                <Amount>90</Amount>
            </Product>
            <Product>
                <ProductID>9</ProductID>
                <ProductName>Z</ProductName>
                <Price>5</Price>
                <Quantity>4</Quantity>
                <Amount>20</Amount>
            </Product>
        </Products>
    </Invoice>      
</Invoices>

Код для экспорта xml:

public DataSet LoadInvoices()
        {
            DataSet ds = new DataSet("Invoices");

            DataTable dt1 = LoadInvoice();
            dt1.TableName = "Invoice";


            DataTable dt3 = LoadProduct();
            dt3.TableName = "Product";

            ds.Tables.Add(dt1);
            ds.Tables.Add(dt3);


            DataColumn colDT3 = dt3.Columns[2];
            DataColumn colDT21 = dt1.Columns[0];
            DataRelation rel2 = new DataRelation("PRODUCT"
                      , colDT21, colDT3);
            rel2.Nested = true;
            ds.Relations.Add(rel2);

            return ds;
        }

  public string xmlConvert(DataSet ds)
        {
            string sXML = "";

            sXML = ds.GetXml();

            return sXML;
        }

Поэтому мне нужно настроить код для экспорта xml так, как я хочу ???

1 Ответ

0 голосов
/ 22 марта 2020

У вас недействительный xml, поскольку он содержит и амперсанд. Должно быть & Проблема, вероятно, может быть исправлена ​​в запросе к набору данных, но недостаточно информации о методах, которые использовались для создания xml. Вы всегда можете редактировать код xml, используя xml linq для фильтрации вывода:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            List<XElement> removeItems = doc.Descendants("catname").Where(x => (string)x != "Hotel").ToList();
            removeItems.Remove();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...