首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中使用zBar生成的XML

如何在SQL中使用zBar生成的XML
EN

Stack Overflow用户
提问于 2016-04-12 02:39:38
回答 1查看 364关注 0票数 1

我正在使用zBar从扫描的图像文件中读取QR代码,并且很难解析zBar在我的SQL脚本中生成的XML。

对于背景,zBar是一个开放源代码的条形码读取工具。除了在您自己的项目中使用的源代码之外,还有一个命令行工具(zBarImg.exe)可以从图像文件中读取条形码(包括QR代码)。我让zBar工作得很好,所以这个问题是关于如何使用它在我的SQL脚本中生成的XML。

我使用ZBar命令行实用工具(zbarimg)读取每个图像上有两个qr代码的图像,它生成这个xml文件:

代码语言:javascript
复制
<barcodes xmlns="http://zbar.sourceforge.net/2008/barcode">
  <source href="C:\BC\SCanner\2016_03_12_14_19_44.jpg">
    <index num="0">
      <symbol type="QR-Code" quality="1">
        <data>F01868</data>
      </symbol>
      <symbol type="QR-Code" quality="1">
        <data>TC16-A397</data>
      </symbol>
    </index>
  </source>
  <source href="C:\BC\SCanner\2016_03_12_14_19_46.jpg">
    <index num="0">
      <symbol type="QR-Code" quality="1">
        <data>F01869</data>
      </symbol>
      <symbol type="QR-Code" quality="1">
        <data>TC16-A397</data>
      </symbol>
    </index>
  </source>
  <source href="C:\BC\SCanner\2016_03_12_14_19_48.jpg">
    <index num="0">
      <symbol type="QR-Code" quality="1">
        <data>F01870</data>
      </symbol>
      <symbol type="QR-Code" quality="1">
        <data>TC16-A397</data>
      </symbol>
    </index>
  </source>
</barcodes>

这很好,我可以看到我需要的所有信息。例如,在第一个图像中,我得到了文件名和两个qr代码:

代码语言:javascript
复制
<source href="C:\BC\SCanner\2016_03_12_14_19_46.jpg">
<symbol type="QR-Code" quality="1"><data>F01868</data>
<symbol type="QR-Code" quality="1"><data>TC16-A397</data>

我很难将它解析/读取到一个可用的表中。

我想我的问题是先得到一个元素然后是节点..。但我也很困惑,为什么索引总是为零,对我来说,构造xml似乎是一种奇怪的方式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 02:46:16

好吧,所以我想出了一种能满足我需要的方法,所以我想和大家分享.并看看是否有更优雅的解决方案,社区可以提出。

创建一个表并将xml拖到SQL中。实际上,我正在一次执行一批许多xml文件,因此在这里对其进行了过度简化:

代码语言:javascript
复制
CREATE TABLE [dbo].[zBar_Batches](
        [ZBatchID] [int] IDENTITY(1,1) NOT NULL,
        [Filename] [nvarchar](255) NULL,
        [BarCodeXML] [xml] NULL,
        [Status] [nvarchar](50) NULL
        ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

        INSERT INTO zBar_Batches (Filename, BarCodeXML, Status) Values ('C:\BC\Logs\barcodes.xml', '', 'New Batch')
        UPDATE zBar_Batches SET BarCodeXML =(SELECT * FROM OPENROWSET(BULK 'C:\BC\Logs\barcodes.xml', SINGLE_BLOB ) AS x ) WHERE Filename = 'C:\BC\Logs\barcodes.xml'

我挂了几天的东西一直就在我眼前.我完全忘记了设置默认名称空间。一旦我解决了这个问题,事情就开始好转了。我习惯于忽略xml文件的第一行,或者只看编码。我需要使用XMLNAMESPACES(默认的'http://zbar.sourceforge.net/2008/barcode'),这是我们在这方面学到的一课。

一旦我得到了这个平方,我所做的关于堆栈溢出的所有研究都开始起作用了,我想出的最好的方法就是这个。我将是第一个承认交叉选项卡select查询是从几个巨大的溢出线程中拼凑而成的,因为这远远超出了我当时的能力。

代码语言:javascript
复制
IF OBJECT_ID('tempdb..#Pages') IS NOT NULL DROP TABLE #Pages
    CREATE TABLE #Pages(
        [zbarID] [int] IDENTITY(1,1) NOT NULL,
        [FilePath] [varchar](255) NULL,
        [QRcode] [varchar](50) NULL
    )

DECLARE @zXML xml

SELECT @zXML = BarCodeXML from zBar_Batches where ZBatchID= @BatchID and BarCodeXML is not null
;WITH XMLNAMESPACES(DEFAULT 'http://zbar.sourceforge.net/2008/barcode') 
INSERT INTO #Pages
select batch.src.value('@href','varchar(255)') as FilePath,
    batch1.sym.value('data[1]','varchar(50)') as QRcode
    from @zXML.nodes('/barcodes/source') as batch(src)
    cross apply batch.src.nodes('index/symbol') as batch1(sym)

这给了我六排。每个条形码一张(3张图像中各有2张)。

代码语言:javascript
复制
zbarID  FilePath                                QRcode
------- --------------------------------------- -----------
1       C:\BC\SCanner\2016_03_12_14_19_44.jpg   F01868
2       C:\BC\SCanner\2016_03_12_14_19_44.jpg   TC16-A397
3       C:\BC\SCanner\2016_03_12_14_19_46.jpg   F01869
4       C:\BC\SCanner\2016_03_12_14_19_46.jpg   TC16-A397
5       C:\BC\SCanner\2016_03_12_14_19_48.jpg   F01870
6       C:\BC\SCanner\2016_03_12_14_19_48.jpg   TC16-A397

当然,我还有一些验证工作要做,并且需要依赖qrcode值的格式来知道它是哪一种代码,但是很快就聚在一起了,

我希望这能帮助其他尝试在sql中使用zBar xml的人。我希望看到任何反馈的最后查询。

如果您感兴趣,zBar也有一个命令行从连接到计算机的摄像头读取。zBarImg实用程序对我非常有用。它能够准确地读取这两个QR代码,在我使用它的近1500张图像中,98%是正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36562690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档