gpt4 book ai didi

java - 使用 TSQL 解析 Apple plist

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:48 25 4
gpt4 key购买 nike

我正在使用 SQL Server 2008 数据库,该数据库将 Apple plist 存储在列中。我正在寻找一种快速而肮脏的方法来提取其中一些信息。

我知道SQL Server can do XML parsing 。由于 plist 不是真正的 XML,有什么可以帮助我查询/操作数据吗?

或者,如果有人推荐一个轻量级 Java 库来解析 plist,我也可以走这条路。

<dict>
<key>BundleSize</key>
<integer>16138240</integer>
<key>DynamicSize</key>
<integer>7569408</integer>
<key>Identifier</key>
<string>com.ea.scrabble.ipad.inc2</string>
<key>Name</key>
<string>Scrabble</string>
<key>Version</key>
<string>1.15.73</string>
</dict>

最佳答案

如果您只需要提取键/值对,您可以使用一些基本的 TSQL 字符串解析。您应该能够将下面的代码转换为一个返回键/值/类型表的函数。只需粘贴此代码并运行它,您就会明白我的意思。它将返回一个包含列 [ID]、[Key]、[Value] 和 [ValueType] 的表。如果您传入一个 plist,速度会很快。

DECLARE @pList VARCHAR(255)
SET @pList =
'<dict>

<key>BundleSize</key>
<integer>16138240</integer>

<key>DynamicSize</key>
<integer>7569408</integer>

<key>Identifier</key>
<string>com.ea.scrabble.ipad.inc2</string>

<key>Name</key>
<string>Scrabble</string>

<key>Version</key>
<string>1.15.73</string>

</dict>
'

DECLARE @IsKey BIT
DECLARE @ID INT
DECLARE @KeyValue TABLE (
ID INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
[Key] VARCHAR(255) NOT NULL,
[Value] VARCHAR(255) NULL,
[ValueType] VARCHAR(255) NULL
)

SET @IsKey = 1

WHILE LEN(@pList) > 10
BEGIN


IF @IsKey = 1
BEGIN

-- Remove junk at the beginning of the string:
SELECT @pList = SUBSTRING(@pList, CHARINDEX('<key>', @pList) + 5, LEN(@pList))

-- Parse out the first value between the <key></key> tags:
INSERT INTO @KeyValue ([Key])
SELECT LEFT(@pList, CHARINDEX('</', @pList)-1)
SELECT @ID = SCOPE_IDENTITY()

-- Remove new junk at the beginning of the string:
SELECT @pList = LTRIM(SUBSTRING(@pList, CHARINDEX(CHAR(13), @pList)+2, LEN(@pList)))

SET @IsKey = 0

END
ELSE -- Is a value
BEGIN

-- Parse out the ValueType and Value:
UPDATE @KeyValue
SET ValueType = (SELECT SUBSTRING(@pList, 2, CHARINDEX('>', @pList)-2)),
Value = (SELECT SUBSTRING(@pList, CHARINDEX('>', @pList)+1, CHARINDEX('</', @pList) - CHARINDEX('>', @pList)-1))
WHERE ID = @ID

-- Remove new junk at the beginning of the string:
SELECT @pList = LTRIM(SUBSTRING(@pList, CHARINDEX(CHAR(13), @pList)+2, LEN(@pList)))

SET @IsKey = 1

END

END

SELECT *
FROM @KeyValue

关于java - 使用 TSQL 解析 Apple plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052760/

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