gpt4 book ai didi

c# - XML 列输出

转载 作者:行者123 更新时间:2023-12-04 03:55:52 25 4
gpt4 key购买 nike

我正在开发一个控制台程序,以使用 SQL Server 数据库和 .NET 生成 XML 文件。

目前,我一直在使用我的代码来生成正确的 XML 文件。当我在记事本中打开文件时,我的 Categories 节点没有被正确识别为 XML 格式,因此我无法很好地使用它。

需要的是:

  1. 如下所示为 类别 生成正确的 XML 标记,并且在任何记事本中打开时不应包含任何特殊字符。

  2. 如果我有多个站点 ID(位置),如何从我的 SQL 表对我的代码执行 for 循环。

     Dim dsXmlDoc As XmlDocument = New XmlDocument()
    ds.Tables(0).TableName = "Inv"
    dsXmlDoc.LoadXml(ds.GetXml())

    Dim xmlInner As XmlElement = CType(xmlDoc.SelectSingleNode("/Root/"),
    XmlElement)xmlInner.AppendChild(xmlDoc.ImportNode(dsXmlDoc.DocumentElement, True))

最佳答案

我想应该是这样的:

WITH x AS (
SELECT
A.[ORDER ID],
RIGHT(A.[POS ID], 2) AS [LesseePOSNumber],
REPLACE(A.[BUSINESS DATE],'-','') + '-' + A.[RECEIPT NUMBER] AS [InvoiceNumber],
'1' AS [DocumentType],
CAST(A.[BUSINESS DATE] AS datetime) + CAST(A.[START SALE TIME] AS DATETIME) AS [TransactionDateTime],
SUM(A.ITEM) AS [TotalNumberOfItems],
SUM(A.[TOTAL AMOUNT] - A.[TOTAL TAX]) AS [TransactionTotalWithoutVAT],
SUM(A.[TOTAL TAX]) AS [VATTotalAmount],
'1' AS [PaymentType],
'4' AS [Currency]
FROM
(
SELECT
T1.[storeId] AS [STORE NO]
,CONVERT(date,CONVERT(varchar(15),T1.businessDate,101)) AS [BUSINESS DATE]
,FORMAT(CONVERT(datetime,SUBSTRING(T1.startSaleTime,1,2) + ':' + SUBSTRING(T1.startSaleTime,3,2) + ':' + SUBSTRING(T1.startSaleTime,5,2), 121), 'h:mm:ss') AS [START SALE TIME]
,CASE WHEN (T1.Type) = 'TRX_Refund' OR (T1.Type) = 'TRX_Overring' THEN CAST(T1.[totalAmount] AS decimal(16,2)) * -1 ELSE CAST(T1.[totalAmount] AS decimal(16,2)) END AS [TOTAL AMOUNT]
,CASE WHEN (T1.Type) = 'TRX_Refund' OR (T1.Type) = 'TRX_Overring' THEN 0 ELSE 1 END AS [GC]
,CASE WHEN (T1.Type) = 'TRX_Refund' OR (T1.Type) = 'TRX_Overring' THEN CAST(T1.[totalTax] AS decimal(16,2)) * -1 ELSE CAST(T1.[totalTax] AS decimal(16,2)) END AS [TOTAL TAX]
,T1.NodeId AS [POS ID]
,T1.[receiptNumber] AS [RECEIPT NUMBER]
,T1.orderId AS [ORDER ID]
,
(
SELECT SUM(CASE WHEN CAST(T2.totalPrice AS float) > 0.00 THEN 1 ELSE 0 END)
FROM [McDonalds_STG].[dbo].[ITEMLEVEL] T2
WHERE T2.orderId = T1.orderId
) AS [ITEM]

FROM [McDonalds_STG].[dbo].[Orders] T1

) A

GROUP BY
A.[STORE NO],
A.[BUSINESS DATE],
A.[POS ID],
A.[RECEIPT NUMBER],
A.[START SALE TIME],
A.[ORDER ID]
)
SELECT
x.[LesseePOSNumber],
x.[InvoiceNumber],
x.[DocumentType],
x.[TransactionDateTime],
x.[TotalNumberOfItems],
x.[TransactionTotalWithoutVAT],
x.[VATTotalAmount],
x.[PaymentType],
x.[Currency],
(
SELECT
49 AS [ID],
(CAST(T1.[totalAmount] AS decimal(16,2)) - CAST(T1.[totalTax] AS decimal(16,2)) ) AS [Total]
FROM [Order] T2
WHERE T2.orderId = x.[ORDER ID]
FOR XML PATH('Category'), TYPE
) As Categories
FROM x
FOR XML PATH ('Invoice'), root ('Invoices')

这里仍然有一些重要的、合理的重构机会(日期/字符串/日期处理需要丢弃并在可能的情况下不使用字符串重新进行),并且可能需要一些拼写错误修复;它不是一个容易阅读的 SQL,我不认为它会直接粘贴到 SSMS 中并且无需一些调整就可以工作!

请注意,您 GROUP BY STORE NO 但您似乎没有使用它

关于c# - XML 列输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63926636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com