• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでHTMLをXMLに変換したときに消える内容)

PHPでHTMLをXMLに変換する際に消えてしまう内容

このQ&Aのポイント
  • PHPを使用してHTMLをXMLに変換する際、一部の内容が消えてしまう現象について教えてください。
  • 例えば、特定の要素やテキストが変換後のXMLに含まれなくなってしまうことがあります。
  • 原因はHTMLの書き方によるものかもしれませんが、どのように対処すればいいのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.1

【原因】 XMLは何も無いところに値を置くことが出来ません。これは例えばもし、もとのHTMLの bar の部分が <span>bar</span> であれば正常に残ることを意味します。 【解決策】 DOMDocumentのまま使いましょう。やや不便な面もありますが、スクレイピングに使えることには変わりありません。 PHPネイティブのDOMによるスクレイピング入門 http://qiita.com/mpyw/items/c0312271819baee09132 不便を感じてきたところでGoutteなどのライブラリの導入を検討するのもありです。

penta012
質問者

お礼

教えていただいたうえに、参考サイトまで提示してもらい、感激です! しかし、通常のHTMLにはタグで囲われてない文字もかなりの頻度で あると思うのですが、そういうのはポロポロ抜けてしまうということ になってしまうんでしょうかねぇ。 それこそ、自動的にspanタグで囲うような処理を間に挟んだりして もらいたいもんだなぁ、と勝手ながら、思ってしまいました。 なのですが、実際の解決法については、教えていただいた参考サイトに、 「自分で正規表現を使って必要部分だけを抜き出す方法は、全ての方法 の中で最も高速」とあったことで、今更ながら「ですよねー」と思い至り、 file_get_contentsで取得したものを、正規表現で削り取るというような、 素朴で泥臭い方法に変えまして、目的は何とか遂げることができました。 ちょっとハラホロヒレハレな結末になってしまいましたが、 ご助言がなければ、もっとヒーヒー言っていたことと思います。 非常に、助かりました。 ありがとうございました。 感謝感謝です!!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 表の作成ができません!(HTML)

    メモ帳にHTML記述でホームページを作っています。 表を作成したいのですが、表示されません。 <html> <head> <title>~</title> </head> <body> <table border=1> <tr> <td>AAA</td> <td> <br>aaaaaaaaaaa <br>bbbbbbbbbbb <br>ccccccccccc </td> </tr> <tr> <td>BBB</td> <td> <br>dddddddddd <br>eeeeeeeeee </td> </tr> </table> </body> </html> で作っています。 (※aaaaaaは、たとえです) 同じタグ記述で、改行のない表を作ったら、これは表示されました。 表内に改行させた場合は、エクスプローラには表示されないのでしょうか?

  • PHP4対応のサーバーではincludeは使えないのか

    HTMLファイルにPHPファイルを読み込ませようとして下記のようにしてみました。 【HTMLファイル(index.html)】 <html> <head> <title>HTMLファイルにPHPファイルを読み込む</title> </head> <body> <table border="3" cellpadding="25" bordercolor="#795B00" bgcolor="#ffffff"> <tr> <td> <?php include('sample.php'); ?> </td> </tr> </table> </body> </html> 【PHPファイル(sample.php)】 <? echo <<< HTML <table> <tr> <td>あいうえお</td> </tr> </table> HTML; ?> 現在PHP4対応のサーバーを使っているのですが、サーバーにアップしても表示されません。 これはPHP4のせいなのでしょうか? それともアップするときのパーミッションの設定のせいなのでしょうか? ちなみにどちらのファイルも705や777その他にもいろいろな組み合わせで試してみたのですが表示されません。 ソースが間違えているせいなのか、サーバーがPHP4対応のせいなのか、パーミッションの設定のせいなのか原因が分からず困っています。 分かる方どうか宜しくお願い致します。

    • 締切済み
    • PHP
  • html→xmlの変換

    後述するようなhtmlファイルがあります。 これをxmlに変換する事は可能なのでしょうか。 また、もし可能なら、その方法、ソフトなども教えていただけると幸いです。 ---以下ソース <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body> <TABLE width="95%" border="1" cellpadding="4" cellspacing="0" bordercolor="#999999"> <tr> <td width="42%" align="CENTER" bgcolor="#BFBFDF"><font size="-1"><b>テーマ</b></font></td> <td width="9%" align="CENTER" bgcolor="#BFBFDF"><b><font size="-1">課目</font></b></td> </tr><tr> <td valign="MIDDLE" bgcolor="#FFFFFF"><a href="abc.html">テーマ1</a></td> <td valign="MIDDLE" align="CENTER" bgcolor="#c8e3e3">課目1</td> </tr><tr> <td valign="MIDDLE" bgcolor="#FFFFFF"><a href="DEF.html">テーマ2</a></td> <td valign="MIDDLE" align="CENTER" bgcolor="#ffffe0">課目2</td> </tr> </TABLE> </body> </html> ---ソース以上

    • ベストアンサー
    • XML
  • HTMLについて

    HTML初心者です。いろいろ調べながら下記の画像のテンプレートを作っているのですが、1枠と2枠の頭が揃いません。わかる方教えてください。画像が見づらいかもしれませんが宜しくお願い致します。 <html> <body> <br><center> <font size="6" color="#00000"> <b>タイトル</b> </font> <hr> <br><br> <table width="800" height="500" cellpadding="15" cellspacing="10" BORDER="4" bgcolor="F3F30E"> <tr> <td width="50%" rowspan="4" BGCOLOR="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 1 </u></b></font> <br><br> <font size="3" color="#00000"> </font> </td> </tr> <tr> <td width="50%" bgcolor="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 2 </b></u></font> <br><br> <font size="3" color="#00000"> </font> </td> </tr> <tr> <td width="50%" bgcolor="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 3 </b></u></font> <br><br> <font size="3" color="#00000"> </font> </td </tr> <tr> <td width="50%" bgcolor="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 4 </b></u></font> <br><br> <font size="3" color="#00000"> <b></b> </font> </td> </tr> </table> </body> </html>

    • ベストアンサー
    • HTML
  • XMLをXSLTやCSSに変換してHTMLで出力

    XMLデータ <?xml version="1.0" encoding="Shift-JIS"?> <flower> <naiyou> 本文 </naiyou> <name>花言葉</name> <flow><name>あきらめ </name></flow> <flow><list>悲しい思い出 </list></flow> <flow><name>情熱 </name></flow> <flow><list>独立 </list></flow> <flow><name>再会 </name></flow> <flow><list>想うはあなた一人 </list></flow> <flow><name>また会う日を楽しみに </name> </flow> </flower> を変換したいのです。 XSLTデータ <?xml version="1.0" encoding="Shift-JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="F:\i08i008\I08I008.html"> <xsl:output method="html"/> <xsl:template match="/"> <html><xsl:apply-templates/></html> </xsl:template> <xsl:template match="flower"> <h1>彼岸花</h1>  <xsl:apply-templates/>  </xsl:template> <xsl:template match="naiyou"> <p><xsl:value-of select="."/></p> </xsl:template> <xsl:template match="flow"> <xsl:value-of select="name"/> <table flame="border" width="50%"> <tr><th>彼岸花</th><th>花言葉</th></tr> <xsl:for-each select="flow"> <tr> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="list"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> ここまで作ったのですが、うまくHTMLに出力できません。原因がわかる方、教えてください。 イメージ図 <html> <head> <title>彼岸花</title> </head> <body> <div style="font-weight:bold"> 彼岸花 </div> ヒガンバナ科ヒガンバナ属の多年草。別名「曼珠沙華」という別名があるのは有名だが、他にも呼び名があるのは知られていない。<br> ただ、その名前が「地獄花」、「捨子花」などと縁起でもない名前ばかりである。<br> その中でも何故「はっかけばばあ」という呼び名があるのかは疑問である。<br> <img src="http://farm1.static.flickr.com/120/252830085_712ffd338b.jpg"width="171" height="171"><br> <br> <table border="1"bgcolor="#b22222"> <tr> <th colspan="2">彼岸花</th> </tr> <tr> <th colspan="2">花言葉</th> </tr> <tr> <th>悲しい思い出</th> <th>独立</th> </tr> <tr> <td>独立</td> <td>諦め</td> </tr> <tr> <td>再開</td> <td>情熱</td> </tr> </table> </body> </html> XSLTについては(CSSもそうですが)、イメージ図の通り、写真を掲載したりや表に配色をしたいとも考えております。そのあたりのアドバイスも頂けると嬉しいです。 あとCSSについてもサイトで色々見たのですが、どれもさっぱり解かりませんでした。初心者な私にでも解かりやすいサイト教えてください。一から勉強しているところです。 CSSはこういう風に記述するんだよ、と簡単に教えて頂ける優しい方もいたら回答お願いします。サイトだけでは悪戦苦闘しそうなもので…。物凄い不安です。

    • 締切済み
    • XML
  • HTMLのテーブル内容を配列にするには

    <html> <head></head> <body> <table border="0">   <tr>     <td>りんご</td>     <td>100円</td>   </tr>   <tr>     <td>みかん</td>     <td>80円</td>   </tr>   <tr>     <td>もも</td>     <td>160円</td>   </tr> </table> </body></html> 上のような内容のHTMLページを読み込み、 テーブルの一番左の行(りんご、みかん、もも)の内容を   @list=("りんご","みかん","もも"); このように配列に代入したいのですが、 どうすればいいでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl
  • HTMLのテーブルについて

    HTMLのテーブルについて 今、HTMLを勉強しています。下記のようにテーブルを作成し一部にセルの結合を行ったところ、(2)の結合したセル右端から外枠までが広がってしまいます。せっかく綺麗に見えるように上の表と下の表のセル幅を合わせても、上の表の右端が出っ張ってしまって意味がありません。 これを解決するにはどのように改善すればいいのでしょうか? <html> <head> <title>A</title> </head> <body> <table border="2"> <tr> <th>No.</th> <th>名前</th> <th width="50">備考</th> </tr> <tr> <td>1</td> <td>A君</td> <td>(1)</td> </tr> <tr> <td>1</td> <td>B君</td> <td rowspan="2">(2)</td> </tr> <tr> <td>1</td> <td>C君</td> <td></td> </tr> </table> <br> <table border="2"> <tr> <th>No.</th> <th>名前</th> <th width="50">備考</th> </tr> <tr> <td>2</td> <td>D君</td> <td>(3)</td> </tr> <tr> <td>2</td> <td>E君</td> <td>(4)</td> </tr> <tr> <td>2</td> <td>F君</td> <td>(5)</td> </tr> </table> </body> </html>

  • 書いたHTMLを見てもらえないでしょうか

    HTMLで困ってしまいました… <table width=100 rules="cols" border=1 align="right" cellspacing="0" cellpadding="0"> <TR bgcolor=white><TD><img width=100 height=100 src="test.jpg"></TD></TR> </table> たくさんあそんだ土曜日<br> 楽しかった日曜日<br> <table width=1000> <TR bgcolor=pink><TD>休日明け</TD></TR> </TABLE> ネコと遊んだ月曜日<br> 買い物をした火曜日<br> よくわからない木曜日<br> テレビをよく見た金曜日<br> 上記のようなソースを作ったのですが、IEで表示すると <table width=1000> <TR bgcolor=pink><TD>休日明け</TD></TR> </TABLE> この部分が画像の部分にかぶさって表示されてしまいます。 「width=1000」の数字を少なくする方法も試したのですが、 ウィンドウを小さくすると又画像にかぶさって表示されてしまって悩んでいます。 どうすれば、かぶさらないように表示できるのでしょうか。 どなたか詳しい方教えてください。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • HTMLのテーブルをExcelにCopy&Pastしたときにセルを分割させない

    以下のようなHTMLがあります。 これをIE6で開き、テーブル部分をマウスでドラッグして選択し、MS-ExcelにCopy&Pastします。 何故か、Excel側で、3セル分に分かれてしまいます。 <br>部分でセルが分割されてしまいますが、分割されないようにすることはできますでしょうか? HTMLに何か仕込むことで対応できますでしょうか? <html> <body> <table border="1">  <tr>   <td>    aaa<br>    bbb<br>    ccc   </td>  </tr> </table> </body> </html> 以上、宜しくお願いします。

    • ベストアンサー
    • HTML
  • スクレイピングPHPにおける複数spanについて

    外部のホームページのソースを拾いRSS化するPHPを作成しました。 ***************************************** 外部ホームページ http://hoge.com/index.html ***************************************** <html> <table class="Table100"> <tr> <th class="Name"><h1>えんどう豆</h1></th> <td class="Price">254</td> <td class="maker"> <span class="a1">メーカー</span> <span class="a2">遠藤農園</span> </td> </tr> </table> </html> ***************************************** スクレイピングPHP http://hagedebu.jp/index.php  ***************************************** <?php class SimpleXMLExtended extends SimpleXMLElement { public function addCData($data) { $dom = dom_import_simplexml($this); $dom->appendChild($dom->ownerDocument->createCDATASection($data)); } } $xml = new SimpleXMLExtended('<rss version="2.0"></rss>'); $channel = $xml->addChild('channel'); $channel->addChild('title', 'TEST RSS'); $dom = new DOMDocument; @$dom->loadHTMLFile('http://hoge.com/index.html'); $xpath = new DOMXPath($dom); foreach ($xpath->query('//*[@class="Table100"]') as $node) { $item = $channel->addChild('item'); $item->addChild('description')->addCData(implode('<br>', [ $xpath->evaluate('string(.//*[@class="Name"]/h1)', $node), $xpath->evaluate('string(.//*[@class="Price"])', $node), $xpath->evaluate('string(.//*[@class="maker"]/span)', $node), ])); } header('Content-Type: application/xml; charset=utf-8'); $xml->asXML('php://output'); ************************************************ 問題点 このPHPでは、 えんどう豆 254 メーカー と表示されてしまいます。 <td class="maker"> <span class="a1">メーカー</span> <span class="a2">遠藤農園</span> </td> class="makerに複数のspanが入っているため、2つめのspanを認識しません。 当方が表示させたいのは下記のようにspanを両方とも表示させたいです。 またはひとつしか表示させることができない場合は、「メーカー」ではなく「遠藤農園」を優先表示させたいです。 このように表示させるためにはどうすればよいでしょうか? 希望表示 えんどう豆 254 メーカー 遠藤農園 または えんどう豆 254 遠藤農園 よろしくお願いいたします。

    • ベストアンサー
    • PHP
プリンターEP50V印刷できない
このQ&Aのポイント
  • パソコン上では自動給紙による印刷が可能ですが、EP50Vプリンターでは手差しを指定する必要があり、自動給紙による印刷ができません。
  • 電源の切り入れとプログラムの再インストールを試しましたが、問題は解決しませんでした。
  • EP50Vプリンターでの自動給紙による印刷ができるようにするには、どのような方法がありますか?
回答を見る

専門家に質問してみよう