doulifang5554 2012-09-18 10:00
浏览 44
已采纳

PHP - 如何使用html标记解析xml中的链接?

I have some problems with an xml that has a a href link, that I just can't echo out in the right order.

XML :

<root>
      <x>290</x>
      <y>204</y>
      <width>420</width>
      <height>70</height>
        <htmlText>
                 <TEXTFORMAT LEADING="7">
                 <P ALIGN="CENTER">
                 <FONT FACE="Arial" SIZE="12" COLOR="#333333" LETTERSPACING="0" KERNING="0">
                 SOME TEXT 
                 <A HREF="mailto:some@email.com" TARGET="">
                 <U>some@email.com</U>
                 </A> SOME TEXT
                 </FONT>
                 </P>
                 </TEXTFORMAT>
                 </htmlText>
    </root>

My moduletext function :

<?php 
class modules
{
     private $xml;
     protected $build;
     // div text
     public $div_x, $div_y, $div_width, $div_height, $title, $post, $date, $caption_fontfamily, $caption, $caption_fontsize, $caption_color, $caption_ls, $serverEmail, $name, $email, $message, $src;

     private $direction, $fontFamily, $af_color, $color, $bold, $italic, $underline, $af_bold, $af_italic, $af_underline, $size;
     // P
     public $p_attr_color, $p_attr_align, $p_attr_fontfamily, $p_attr_fontsize, $p_content, $p_content_temp;
     // Image module
     private $img_path, $img_x, $img_y, $img_rotation, $img_width, $img_height;
     // Shape module
     private $shape_x, $shape_y, $shape_width, $shape_height, $fill_color, $border_color, $border_size, $shape_type, $alpha, $rotation, $prettyPrinting, $opacity;
    public function moduleText($xml,$print = '')
     {
         $this->xml = new SimpleXMLElement($xml);
         // Plocka ut XML-data
         $this->div_x = $this->xml->x;
         $this->div_y = $this->xml->y;
         $this->div_width = $this->xml->width;
         $this->div_height = $this->xml->height;
         $this->divStart = $this->xml->htmlText[0]->TEXTFORMAT->attributes->LEADING;
         $this->build = '<div id="printthis" style="position:absolute; overflow:auto;left:'.$this->div_x.'px;top:'.$this->div_y.'px;width:'.$this->div_width.'px;height:'.$this->div_height.'px;">';

     foreach($this->xml->htmlText as $htmltext)
         {
             foreach($htmltext as $textformat)
             {
             $line_height = $textformat->attributes()->LEADING;
                 foreach($textformat as $p)
                 {

                     foreach($p as $font)
                     {

                        if(isset($font->A))
                         {      


                         foreach($font->A as $link) {
                             $size = $link->attributes()->SIZE;
                             $target .= $link->attributes()->TARGET;

                             $this->build .= '<div style="width:100%; float:left; margin-left:5px; font-size:'.$size.'px;"><a href="' . str_replace("http://","",$link->attributes()->HREF) . '" target="'.$target.'" style="font-size:'.$size.'px;">'.str_replace(array("http://","mailto:"),"",$link->attributes()->HREF).'</a></div>';
                             } 
                         }
                         $fontsize = $font->attributes()->SIZE;
                         $fontfamily = str_ireplace(array('_'), array(''), $font->attributes()->FACE);
                         $fontcolor = $font->attributes()->COLOR;
                         $test = "1.305";
                         if(strlen($font) > 0) {
                         $this->build .= '<div align="'.$this->p_attr_align.'" style="width:100%; color:'.$fontcolor.';font-family:'.$fontfamily.';font-size:'.$fontsize.'px; line-height:'.$test.'em;">';
                         if(isset($font->A)) {
                         $this->build .= iconv('UTF-8','ISO-8859-1', str_ireplace(array('[b]','[/b]','[i]','[/i]'), array('<b>','</b>','<i>','</i>'), $font . '</div>')); 
                         } else {
                         $this->build .= iconv('UTF-8','ISO-8859-1', str_ireplace(array('[b]','[/b]','[i]','[/i]'), array('<b>','</b>','<i>','</i>'), $font . '</div>')); 
                         }
                         }
                         if(strlen($font->I) > 0) {
                         $this->build .= '<div align="'.$this->p_attr_align.'" style="width:100%;  color:'.$fontcolor.';font-family:'.$fontfamily.';font-size:'.$fontsize.'px; line-height:'.$test.'em;">';
                         $this->build .= iconv('UTF-8','ISO-8859-1', str_ireplace(array('[b]','[/b]','[i]','[/i]'), array('<b>','</b>','<i>','</i>'), "<i>".$font->I . '</i></div>'));
                     }

                     if(strlen($font->U) > 0) {
                         $this->build .= '<div align="'.$this->p_attr_align.'" style="width:100%; text-decoration:underline;  color:'.$fontcolor.';font-family:'.$fontfamily.';font-size:'.$fontsize.'px; line-height:'.$test.'em;">';

                         $this->build .= iconv('UTF-8','ISO-8859-1', str_ireplace(array('[b]','[/b]','[i]','[/i]'), array('<b>','</b>','<i>','</i>'), "<i>".$font->U . '</i>'));
                         $this->build .= '</div>';
                     }
                     if(strlen($font) == 0 && strlen($font->U) == 0 && strlen($font->I) == 0) {
                     $this->build .= '<div align="'.$this->p_attr_align.'" style="width:100%; text-decoration:underline;  color:'.$fontcolor.';font-family:'.$fontfamily.';font-size:'.$fontsize.'px; min-height:'.$test.'em; line-height:'.$test.'em;"></div>';
                     }

                     } 
                 }
              }
         }
         $this->build .= '</div>';
                return $this->build;
     }
            }
            ?>

PHP calling the method with xml:

<?php include("functions_modules.php"); 
$module = new modules; $xmlcode = '<root>
<x>290</x>
<y>204</y>
<width>420</width>
<height>70</height>
<htmlText>
<TEXTFORMAT LEADING="7">
<P ALIGN="CENTER">
<FONT FACE="Arial" SIZE="12" COLOR="#333333" LETTERSPACING="0" KERNING="0">
SOME TEXT
<A HREF="mailto:some@email.com" TARGET="">
<U>some@email.com</U>
</A>
SOME TEXT
</FONT></P>
</TEXTFORMAT>
</htmlText>
</root>'; 
echo $module->moduleText($xmlcode); ?>

The result becomes this :

SOME TEXT
SOME TEXT
<a href="mailto:some@email.com">some@email.com</a>

It should be:

SOME TEXT some@email.com SOME TEXT

  • 写回答

2条回答 默认 最新

  • dongzhan7909 2012-09-18 11:33
    关注

    I hope this is helpful. I enjoy using xpath to cut through the XML I get back from SimpleXML:

    <?php
    $xml = new SimpleXMLElement("xml_file_path", NULL, True);
    $tags = $xml->xpath('//a');  //use xpath on the XML to find the a tags
    
    foreach($tags as $tag){  
        echo $image['href'] ;  //here is the a tag src
    }
    ?>
    

    try this link

    http://php.net/manual/en/book.simplexml.php

    Reading an XML file and store data to mysql database

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?