Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用TSQL解析appleplist_Java_Sql Server_Tsql_Plist - Fatal编程技术网

Java 用TSQL解析appleplist

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>

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

我知道。既然plist不是真正的XML,那么有什么东西可以帮助我查询/操作数据吗

或者,如果有人推荐使用轻量级Java库来解析plists,我也可以这样做

<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列中,然后使用问题主体中已经引用的信息。