c# - XSD 到数据集(这也是一个 xsd?)

标签 c# xml crystal-reports xsd dataset

我有点困惑,我有一个 XSD 说明我已经生成并填充的 XML 的结构,现在我必须以 PDF 格式显示它的信息。

我在考虑 Crystal 报表,但如果它是最好的解决方案我不考虑,但是好吧,我已经读到我可以从我的 XSD 创建一个 Crystal 报表但是我必须实例化 XSD 来填充它,但是我拥有的 XSD 不是数据集,而是 XML 模式,所以我不知道该怎么做,我在这里迷路了。

这是我得到的XSD scheme(是政府的公开文件):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 和 Dataset 的混淆可能是因为不了解 Crystal Reports 如何获取其数据。尝试 this link ,或搜索“ Crystal 报表推送方法”时的任何其他方法。

简而言之,使用 push 方法,在 Visual Studio 中的设计时,您可以使用数据集作为 Crystal Report 的数据源,以便您可以拖放以获取报表内容的来源和格式。在运行时,您使用报表数据填充数据集,然后将其设置为报表的数据源。由于您可以从 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,右键单击并调用 View Designer 命令。您会看到一个 XSD 编辑器;另一方面,数据集图...

这应该处理 XSD 到数据集的事情。

@paquetp 没有告诉您的是,即使您(真的)幸运地在 .NET 上获得了对 XSL-FO 的又好又便宜的支持(因为您提到了 C#),您仍然处于需要一些东西来轻松编辑您的样式表;为此,大多数人更喜欢所见即所得的编辑器,这是另一件很难找到便宜的东西。

因此,我认为考虑到您发布的 XSD,它允许从中创建数据集,Crystal Reports 的方法可以与一些不错的、用户友好的功能一起使用。

关于c# - XSD 到数据集(这也是一个 xsd?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10712389/

相关文章:

mysql 内连接和并集

c# - 从方法返回后变量值不会改变

c# - 在 Visual Studio 2008 中将 Soap header 添加到 Soap 请求

JAVA - 如何读取 XML 文件并将每个节点保存到字符串数组中

c# - .NET XPathNavigator 找不到 XPath 查询中指定的元素(但 XPath 查询在 XMLSpy 中有效)

android - drawableTint 无法通过使用的 AppCompact-v7 :25. 3.1 工作

c# - Gridview刷新问题

c# - 我可以减少这些代码行,使双击可以在两个 if/else if 选项之间切换吗

c# - 将报告重新绑定(bind)到新的 XML XSD

visual-studio-2010 - Visual Studio 2012 应用程序的 Crystal 报表