Java 用TSQL解析appleplist
我正在使用一个SQL Server 2008数据库,该数据库在一列中存储苹果plists。我正在寻找一种快速而肮脏的方法来提取这些信息 我知道。既然plist不是真正的XML,那么有什么东西可以帮助我查询/操作数据吗 或者,如果有人推荐使用轻量级Java库来解析plists,我也可以这样做Java 用TSQL解析appleplist,java,sql-server,tsql,plist,Java,Sql Server,Tsql,Plist,我正在使用一个SQL Server 2008数据库,该数据库在一列中存储苹果plists。我正在寻找一种快速而肮脏的方法来提取这些信息 我知道。既然plist不是真正的XML,那么有什么东西可以帮助我查询/操作数据吗 或者,如果有人推荐使用轻量级Java库来解析plists,我也可以这样做 <dict> <key>BundleSize</key> <integer>16138240</integer> <key>
<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]列的表。如果你只经过一层,速度很快
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
如果只需要提取键/值对,可以使用一些基本的TSQL字符串解析。您应该能够将下面的代码转换为返回键/值/类型表的函数。只要粘贴这个代码并运行它,你就会明白我的意思。它将返回一个包含[ID]、[Key]、[Value]和[ValueType]列的表。如果你只经过一层,速度很快
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
您使用的是什么DMB?Oracle和SQL Server中有一些专有的XML解析工具。可能会让您有所了解-PLIST不是真正的XML呢?只要格式正确,就可以将其粘贴在XML列中,然后使用问题主体中已经引用的信息?Oracle和SQL Server中有一些专有的XML解析工具。可能会让您有所了解-PLIST不是真正的XML呢?只要格式正确,就可以将其粘贴在XML列中,然后使用问题主体中已经引用的信息。