2010-07-28 37 views
1

为什么解析器被切割的URL这样的:PHP XML解析器切割网址内部节点

内部节点:

http://img844.imageshack.us/content.php?page=done&l=img844/4783/php4dd.jpg 

解析后:

[done_page] => L = img844/8828/php4e8.jpg

private function _parse($result) 
{ 

    $XMLparser = xml_parser_create('UTF-8'); 



    xml_set_element_handler(
    $XMLparser, 
    Array($this, 'startElement'), 
    Array($this, 'endElement') 
); 

    xml_set_character_data_handler($XMLparser, Array($this, 'stringElement')); 






    if (!xml_parse($XMLparser, $result)) { 

    echo '<br>XML Error: '.xml_error_string(xml_get_error_code($XMLparser)); 
    echo ' at line '.xml_get_current_line_number($XMLparser); 
    exit(); 

    } 

    print_r($this->parsed_results); 


    xml_parser_free($XMLparser); 

} 

public function stringElement($parser, $str) 
{ 

    if(strlen(trim($str)) > 0) 
    { 

    $this->parsed_results[$this->current_name] = $str; 

    } 

} 


public function startElement($parser, $name, $attributes) 
{ 

    $this->current_name = $name; 

} 


public function endElement($parser, $name) 
{ 



} 

<?xml version="1.0" encoding="iso-8859-1"?><links> 
    <image_link>http://img844.imageshack.us/img844/8828/php4e8.jpg</image_link> 
    <thumb_link>http://img844.imageshack.us/img844/8828/php4e8.th.jpg</thumb_link> 
    <ad_link>http://img844.imageshack.us/my.php?image=php4e8.jpg</ad_link> 
    <thumb_exists>yes</thumb_exists> 
    <total_raters>0</total_raters> 
    <ave_rating>0.0</ave_rating> 

    <image_location>img844/8828/php4e8.jpg</image_location> 
    <thumb_location>img844/8828/php4e8.th.jpg</thumb_location> 
    <server>img844</server> 
    <image_name>php4e8.jpg</image_name> 
    <done_page>http://img844.imageshack.us/content.php?page=done&amp;l=img844/8828/php4e8.jpg</done_page> 
    <resolution>468x458</resolution> 

    <filesize>118347</filesize> 
    <image_class>r</image_class> 
</links> 
+0

你能否给我们一个被解析的XML样本?这闻起来像一个实体问题。 – Charles 2010-07-28 20:04:13

+0

Suuuure的事情。在底部添加。 ;) – Somebody 2010-07-28 20:07:06

+0

在继续解析之前,也许raw xml应该通过一些解码函数传递?这是我第一次使用xml。 :) 任何意见都会很棒。 – Somebody 2010-07-28 20:09:15

回答

2

解析器可能已经返回的文本作为两个连续的文本节点,导致stringElement被调用两次。第二次调用会覆盖第一个文本节点中的文本。尝试更改stringElement,以便将输入连接到任何现有文本并查看是否返回整个字符串。

在第二次检查时,我很确定解析器将&amp;实体引用作为单独的节点返回,因此您可能必须自己重新组合所有文本。根据解析器的实现,实体引用可能是一种不同类型的节点,因此您必须研究您的特定解析器在实体引用中的作用。

+0

好主意!我会尝试连接节点。是的,我认为这就是为什么它只显示url的最后部分。 顺便说一句我正在使用内置的PHP解析器,我没有写我自己的解析器。 顺便说一句,它是更好的用户php5的DocumentDOM类与XML的工作? – Somebody 2010-07-28 20:28:57

+0

对不起,我知道了很多关于XML,但关于PHP几乎没有什么:-) – 2010-07-28 20:33:53

+0

是啊,你是对的 我增加了$海峡和之间
标签就是它打印出来: \t
DONE_PAGE:
HTTP:// img844.imageshack.us/content.php?page=done

l = img844/3939/php50a.jpg
Somebody 2010-07-28 20:41:47