XSD 到数据集(哪个也是 xsd?
本文关键字:xsd 数据集 XSD | 更新日期: 2023-09-27 18:35:05
我有点困惑,我有一个XSD来声明我已经生成并填充的XML的结构,现在我必须在PDF中显示其信息。
我正在考虑水晶报告,但我不知道它是否是最佳解决方案,但是好吧,我已经读到我可以从我的 XSD 创建一个水晶报告,但随后我必须实例化 XSD 来填充它,但我拥有的 XSD 不是数据集,而是 XML 模式,所以我不知道该怎么做, 我在这里很迷茫。
这是我得到的XSD方案(是政府的公共文件):http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd
这是我用它生成的示例 XML:
<?xml version="1.0" encoding="UTF-8"?>
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" version="3.2" fecha="2012-05-22T17:47:38" sello="G3xkr9rKA8ix0ub8XJTNqb0TRR14Sxs4Uj7oDfPj8oCM4HzoMTF7pWcpfx5VCzp9rT+CW6IstoiYLaUNiBtDwCS8oHrYuVawPh+tn+GQpSNi+plafJjcOq8U8wl0nk1hKnqhJWenklCRgxNOFvVeYIMLe0MycUU/2Q7g0mgJOhw=" formaDePago="Pago en una sola exhibicion" noCertificado="30001000000100000800" certificado="MIIE/TCCA+WgAwIBAgIUMzAwMDEwMDAwMDAxMDAwMDA4MDAwDQYJKoZIhvcNAQEFBQAwggFvMRgwFgYDVQQDDA9BLkMuIGRlIHBydWViYXMxLzAtBgNVBAoMJlNlcnZpY2lvIGRlIEFkbWluaXN0cmFjacOzbiBUcmlidXRhcmlhMTgwNgYDVQQLDC9BZG1pbmlzdHJhY2nDs24gZGUgU2VndXJpZGFkIGRlIGxhIEluZm9ybWFjacOzbjEpMCcGCSqGSIb3DQEJARYaYXNpc25ldEBwcnVlYmFzLnNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEjAQBgNVBAcMCUNveW9hY8OhbjEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTIwMAYJKoZIhvcNAQkCDCNSZXNwb25zYWJsZTogSMOpY3RvciBPcm5lbGFzIEFyY2lnYTAeFw0xMDA3MzAxNjU4NDBaFw0xMjA3MjkxNjU4NDBaMIGWMRIwEAYDVQQDDAlNYXRyaXogU0ExEjAQBgNVBCkMCU1hdHJpeiBTQTESMBAGA1UECgwJTWF0cml6IFNBMSUwIwYDVQQtExxBQUEwMTAxMDFBQUEgLyBBQUFBMDEwMTAxQUFBMR4wHAYDVQQFExUgLyBBQUFBMDEwMTAxSERGUlhYMDExETAPBgNVBAsMCFVuaWRhZCAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD0ltQNthUNUfzq0t1GpIyapjzOn1W5fGM5G/pQyMluCzP9YlVAgBjGgzwYp9Z0J9gadg3y2ZrYDwvv8b72goyRnhnv3bkjVRKlus6LDc00K7Jl23UYzNGlXn5+i0HxxuWonc2GYKFGsN4rFWKVy3Fnpv8Z2D7dNqsVyT5HapEqwIDAQABo4HqMIHnMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMB0GA1UdDgQWBBSYodSwRczzj5H7mcO3+mAyXz+y0DAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vcGtpLnNhdC5nb2IubXgvc2F0LmNybDAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNhdC5nb2IubXgvMB8GA1UdIwQYMBaAFOtZfQQimlONnnEaoFiWKfU54KDFMBAGA1UdIAQJMAcwBQYDKgMEMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4IBAQArHQEorApwqumSn5EqDOAjbezi8fLco1cYES/PD+LQRM1Vb1g7VLE3hR4S5NNBv0bMwwWAr0WfL9lRRj0PMKLorO8y4TJjRU8MiYXfzSuKYL5Z16kW8zlVHw7CtmjhfjoIMwjQo3prifWxFv7VpfIBstKKShU0qB6KzUUNwg2Ola4t4gg2JJcBmyIAIInHSGoeinR2V1tQ10aRqJdXkGin4WZ75yMbQH4L0NfotqY6bpF2CqIY3aogQyJGhUJji4gYnS2DvHcyoICwgawshjSaX8Y0Xlwnuh6EusqhqlhTgwPNAPrKIXCmOWtqjlDhho/lhkHJMzuTn8AoVapbBUnj" subTotal="105.5678" total="1000" tipoDeComprobante="ingreso" metodoDePago="Efectivo" LugarExpedicion="Madereria Central">
<cfdi:Emisor rfc="PEPJ8001019Q8" nombre="Mader">
<cfdi:DomicilioFiscal calle="Calle1" noExterior="12" colonia="Industrial" localidad="Mexico" referencia="aqui" municipio="df" estado="df" pais="mexico" codigoPostal="07300" />
<cfdi:RegimenFiscal Regimen="Persona Moral" />
</cfdi:Emisor>
<cfdi:Receptor rfc="DUK" nombre="Elevadores">
<cfdi:Domicilio calle="8" noExterior="8" noInterior="0" colonia="9" localidad="9" referencia="9" municipio="9" estado="9" pais="9" codigoPostal="9" />
</cfdi:Receptor>
<cfdi:Conceptos>
<cfdi:Concepto cantidad="1" unidad="metros" noIdentificacion="A1121212" descripcion="Ayacahuitle Primera" valorUnitario="500" importe="500" />
<cfdi:Concepto cantidad="2" unidad="metros" noIdentificacion="A21128142" descripcion="Ayacahuitle Sec" valorUnitario="600" importe="1200" />
<cfdi:Concepto cantidad="3" unidad="metros" noIdentificacion="A31281" descripcion="Ayacahuitle Ter" valorUnitario="700" importe="2100" />
</cfdi:Conceptos>
<cfdi:Impuestos>
<cfdi:Retenciones>
<cfdi:Retencion impuesto="IVA" importe="100" />
</cfdi:Retenciones>
</cfdi:Impuestos>
<cfdi:Complemento>
<tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/TimbreFiscalDigital/TimbreFiscalDigital.xsd" selloCFD="G3xkr9rKA8ix0ub8XJTNqb0TRR14Sxs4Uj7oDfPj8oCM4HzoMTF7pWcpfx5VCzp9rT+CW6IstoiYLaUNiBtDwCS8oHrYuVawPh+tn+GQpSNi+plafJjcOq8U8wl0nk1hKnqhJWenklCRgxNOFvVeYIMLe0MycUU/2Q7g0mgJOhw=" FechaTimbrado="2012-05-22T17:47:42" UUID="221BA53A-827A-4474-B9F9-3542ECDEB979" noCertificadoSAT="30001000000100000801" version="1.0" selloSAT="ZnKdULidoo95wXOmk1cPM/ZB5Fh8PvsbkRD+zgTA21yIBqjFopt4UGL6sA0DqeWJdzI1Q92lxm6FwrlK+GxFHM7fvKeStE5elEsCW4GyVQG7gvXXxTKiM0xxPzTkxh6OQLeqDMgzodM0my/M8KJx/JiT8JeEVu4wZF1cyc1w13k=" />
</cfdi:Complemento>
</cfdi:Comprobante>
考虑到您使用的标签,我会尝试回答您的问题...还有一些猜测。
既然你已经提到了 C# 和 Crystal Reports...Visual Studio附带免费版的Crystal Reports。它可以满足您的需求,而且是免费的:有一个图形设计器来构建输出布局;附带一个免费的查看器,如果您的用户需要在导出或打印之前查看结果,您可以嵌入,如果您需要以编程方式生成结果,则可以使用 API。
您对XSD和数据集的混淆可能来自不了解Crystal Reports如何获取其数据。尝试此链接,或在搜索"水晶报告推送方法"时尝试任何其他链接。
简而言之,使用推送方法,在 Visual Studio 中的设计时,可以使用数据集作为 Crystal 报表的数据源,以便可以拖放到报表内容的源和格式。在运行时,使用报表数据填充数据集,然后将其设置为报表的数据源。由于您可以从 XML 填充数据集,因此您现在有一个解决方案。
若要将您发布的 XSD 转换为 Visual Studio 将其识别为"数据集"XSD 的 XSD,请尝试此操作并检查生成的输出以了解两者之间的区别:
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
using (XmlReader reader = XmlReader.Create(@"D:'temp 1'sitio_internet'cfd'3'cfdv32.xsd", settings))
{
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema(reader);
dataSet.WriteXmlSchema(@"D:'temp 1'sitio_internet'cfd'3'cfdv32-DS.xsd");
}
作为学习工具,将两个 XSD 添加到 Visual Studio 项目中;对于每个 XSD,右键单击并调用"视图设计器"命令。您将看到一个 XSD 编辑器;对于另一个,数据集图...
这应该照顾XSD到数据集的事情。
@paquetp没有告诉你的是,即使你(真的)幸运地在.NET上获得了对XSL-FO的良好和廉价的支持(因为你已经提到了C#),你仍然需要一些东西来轻松编辑你的样式表;大多数人更喜欢所见即所得的编辑器,这是另一件很难找到便宜的东西。
因此,我认为,鉴于您发布的XSD,它允许从中创建数据集,Crystal Reports的方法可以使用一些不错的,用户友好的功能。
您正在寻找的技术是 XSL-FO