2012-11-08 86 views
0

我想獲取標記之間的數據,從XML之間多餘的文字,使用NSRegularExpression使用NSRegularExpression到XML標籤

這是XML

<?xml version="1.0" encoding="UTF-8"?> 
<document xmlns="@link" xmlns:xsi="@link" xsi:schemaLocation="@link" version="1.0"> 
<field left="493" top="670" right="1550" bottom="760" type="text"> 
<value encoding="utf-16">JENNIFER mml</value> 
<line left="493" top="670" right="1550" bottom="733"> 
<char left="493" top="670" right="549" bottom="733" confidence="69">J</char> 
<char left="565" top="670" right="605" bottom="718" confidence="71" suspicious="true">E</char> 
<char left="623" top="670" right="660" bottom="718" confidence="76">N</char> 
<char left="678" top="670" right="720" bottom="722" confidence="56">N</char> 
<char left="736" top="674" right="776" bottom="730" confidence="80">I</char> 
<char left="804" top="674" right="841" bottom="729" confidence="74">F</char> 
<char left="858" top="670" right="902" bottom="725" confidence="80">E</char> 
<char left="922" top="670" right="964" bottom="730" confidence="86">R</char> 
<char left="965" top="670" right="1442" bottom="730" confidence="100" /> 
<char left="1443" top="685" right="1495" bottom="720" confidence="2" suspicious="true">m</char> 
<char left="1492" top="685" right="1534" bottom="719" confidence="11" suspicious="true">m</char> 
<char left="1544" top="685" right="1550" bottom="718" confidence="100" suspicious="true">l</char> 
</line> 
</field> 
</document> 

我想提取該數據,該值標籤之間

<value encoding="utf-16">JENNIFER mml</value> 

這是IOS代碼

NSString *xml [email protected]"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><document xmlns=\"@link\" xmlns:xsi=\"@link\" xsi:schemaLocation=\"@link\" version=\"1.0\"><field left=\"493\" top=\"670\" right=\"1550\" bottom=\"760\" type=\"text\"><value encoding=\"utf-16\">JENNIFER mml</value><line left=\"493\" top=\"670\" right=\"1550\" bottom=\"733\"><char left=\"493\" top=\"670\" right=\"549\" bottom=\"733\" confidence=\"69\">J</char><char left=\"565\" top=\"670\" right=\"605\" bottom=\"718\" confidence=\"71\" suspicious=\"true\">E</char><char left=\"623\" top=\"670\" right=\"660\" bottom=\"718\" confidence=\"76\">N</char><char left=\"678\" top=\"670\" right=\"720\" bottom=\"722\" confidence=\"56\">N</char><char left=\"736\" top=\"674\" right=\"776\" bottom=\"730\" confidence=\"80\">I</char><char left=\"804\" top=\"674\" right=\"841\" bottom=\"729\" confidence=\"74\">F</char><char left=\"858\" top=\"670\" right=\"902\" bottom=\"725\" confidence=\"80\">E</char><char left=\"922\" top=\"670\" right=\"964\" bottom=\"730\" confidence=\"86\">R</char><char left=\"965\" top=\"670\" right=\"1442\" bottom=\"730\" confidence=\"100\"> </char><char left=\"1443\" top=\"685\" right=\"1495\" bottom=\"720\" confidence=\"2\" suspicious=\"true\">m</char><char left=\"1492\" top=\"685\" right=\"1534\" bottom=\"719\" confidence=\"11\" suspicious=\"true\">m</char><char left=\"1544\" top=\"685\" right=\"1550\" bottom=\"718\" confidence=\"100\" suspicious=\"true\">l</char></line></field></document>"; 
NSString *pattern = @"<value>(\\d+)</value>"; 

NSRegularExpression *regex = [NSRegularExpression 
           regularExpressionWithPattern:pattern 
           options:NSRegularExpressionCaseInsensitive 
           error:nil]; 
NSTextCheckingResult *textCheckingResult = [regex firstMatchInString:xml options:0 range:NSMakeRange(0, xml.length)]; 

NSRange matchRange = [textCheckingResult rangeAtIndex:1]; 
NSString *match = [xml substringWithRange:matchRange]; 
NSLog(@"Found string '%@'", match); 

回答

1

您目前的正則表達式只能匹配<value>標籤\d+的一個數字。

<value>(\d+)</value> 

然而,你的輸入有一個屬性(encoding="utf-16"不包含數字作爲值(JENNIFER mml):

<value encoding="utf-16">JENNIFER mml</value> 

爲了解決第一個問題,你可以手動編碼將屬性轉換爲正則表達式,或者稍微修改模式:

<value encoding="utf-16"> 
or 
<value[^>]*> 

要匹配標記的值,因爲它似乎是字母(含空格),我們將在數扔得,你可以使用:

[a-zA-Z0-9\s]+ 

所以,你完全可以嘗試:

<value[^>]*>([a-zA-Z0-9\s]+)</value> 

根據您當前的代碼(拷貝粘貼+):

NSString *pattern = @"<value[^>]*>([a-zA-Z0-9\\s]+)</value>"; 

UPDATE什麼可以之間的匹配)
根據評論,<value></value>標籤之間的確切文本可以包含任意字符,而不僅僅是字母數字。爲了解決這個問題,我們就可以匹配所有與(.*)

<value>[^>]*>(.*)</value> 

根據您當前的代碼:

NSString *pattern = @"<value[^>]*>(.*)</value>"; 
+0

嗨,該值可以包含特殊字符也 我無法得到輸出,如果價值標籤包含這樣的數據 > A FARIA07CUMWRSREFERENADATACDNAPMNDN II Xmommmmmddm Amn BwmaoammmDaDm l_n = ___ s_I ^^^ - ^^^ - ^^^^ lnd md DD mbFmmm JENNIFER Nemnm A XLDNm PITTmamBRITISHcmm LONDONgdI 0110611966 mmmmm 719706442r -------------^- ^^^ - ^^ Flkedhddrm ___ ^^^ _ Omni USA DPODA894633m CALIFORNIA MBRENTWODDmm 37 00 MAIN ST.HOUD Bum Pmmm 2Hampmm 922-890-444 $ Mobupnmb 925-888-1677PRBBDrmrr ^^ > ^^ ._。= __.____°Z 0710212007 W^1

+0

@syedimty你有沒有得到它的工作,或者你還想要額外的幫助? – newfurniturey

+0

我試過你的正則表達式,但它只適用於aplpha數值,但值標記可以包含任何特殊字符。你能提供一個更好的正則表達式,它接受任何字符,包括符號 –