2013-04-09 66 views
0

我完全停留在如何解決這個問題上。基本上我有一個curl調用,返回一個xml以及其他信息,我需要做的是基本上只獲取返回的數據的xml部分,並將其設置爲一個單獨的變量,我猜。所以例如從返回的數據中只抓取XML內容

array(
    ['name']='john', 
    ['location']='california', 
) 

    <?xml version="1.0"?> 
    <data> 
     <name>somename</name> 

    </data> 

    array(
    ['name']='john', 
    ['location']='california', 
) 

    array(
    ['name']='john', 
    ['location']='california', 
) 

所以我只想要這個整個數據的XML部分。我沒有嘗試過任何東西,因爲我甚至不知道從哪裏開始可以有人幫助我。

回答

1

試試這個:

$result = " 
    array(
    ['name']='john', 
    ['location']='california', 
) 

    <?xml version=\"1.0\"?> 
    <data> 
     <name>somename</name> 

    </data> 

    array(
    ['name']='john', 
    ['location']='california', 
) 

    array(
    ['name']='john', 
    ['location']='california', 
) 
"; 

$matches = array(); 
preg_match('/<\?xml(.*)<\/data>/is', $result, $matches); 

var_dump(reset($matches)); 
+0

哇完美的作品非常感謝你 – Yeak 2013-04-10 00:05:49

+0

@Yevo結束標記始終是''? – David 2013-04-10 00:11:34

+0

是的,它應該是 – Yeak 2013-04-10 03:15:23

0

您應該能夠使用正則表達式來檢測XML標頭(<?xml version="1.0"?>)和根元素(<data>)。一旦你有了,你只需要檢測,結束標籤(</data>),瞧!小麥從穀殼中分離出來!

+0

謝謝。你有沒有任何機會可以分享我可以分享的任何代碼?我不是正則表達式的最大粉絲 – Yeak 2013-04-09 23:44:30

4

的前奏,需要注意的是你所做的一切,這幾乎可以肯定是錯誤的方式去了解它是非常重要的。您應該嘗試操縱產生該數據的應用程序,以便以嚴格定義的格式生成數據。

爲了這個答案的目的,我認爲在這種情況下是不可能的。


很明顯,對此的答案是使用正則表達式從其餘數據中提取XML。

但是試圖提供這個正則表達式的其他答案對於通用用例來說還不夠好。這是我會做的:

@ 
    (?:<\?xml.*?\?>\s*)?    # optionally match the XML declaration 
    <([^/]\S*)[^>]*>     # match opening tag and capture the tag name 
    (?:        # group alternates together 
     (?>       # atomic group for efficiency 
      (?:(?!</?[^/>]+[^/]>).)+ # match everything up to the next long tag 
     ) 
     | (?R)       # ...or a recursive match of the expression 
    )*        # ...zero or more times 
    </\1>       # match the closing tag 
@isx 

這,關鍵是,假設你正在尋找的XML格式良好。重要的是要注意,你不應該在很大程度上可以不使用正則表達式來完成這個任務,除非你100%確定你正在搜索的XML格式正確。

如果是這種情況,該表達式將匹配嵌套在給定字符串中的任何完整的XML文檔,並且能夠處理像標籤名稱匹配文檔元素和自閉標籤的元素的陷阱。

See it working

+0

謝謝你的答案。不幸的是,我無法修改所發送的數據,但我明白你的意思。此外,XML必須是正確的格式,因爲我最終將使用simplexml,所以它已被格式化正確謝謝。 – Yeak 2013-04-10 03:19:00

+0

你能解釋一下你寫的正則表達式嗎?我看到的是一堆正則表達式模式,當我不知道該把它放在哪裏時,它並不是真正有用的。 – Yeak 2013-04-10 16:12:50

+0

@Yevo你看過帖子最後的鏈接嗎?這應該演示如何從包含原始源數據的變量中獲取包含XML文檔的字符串。 – DaveRandom 2013-04-10 16:22:32