質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

840閲覧

PHPでdocxファイル【document.xml】を解析したい

hiroshi3324

総合スコア14

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/03/03 12:37

編集2020/03/04 13:02

前提・実現したいこと
現在PHPを使ってwordのファイルの中身を解析したいと検討しているものです。

具体的にはwordファイルのテキストと画像を取得(画像に関しては、画像名とかまではいらない)したいと考えて色々調べてると、下記のサイトがヒットしてこちら参考にさせてもらいながら進めています。

今更ながらphpでword(docx)を読み込んでplain textを得る

こちらのサイトを見ながら、コードを実行するとテキストの情報は取得できて画像の要素の数とかまでも取得することができたのですが、テキストと画像両方を取得するやり方がどうしたらいいのか困っている状態です。
やりたいこととしましては、bodyというdomの中で、ループさせながら、
・getElementsByTagName("pic")があったら「これは画像です!」と出力する。
・テキストだったらgetElementsByTagName("p")で「テキストの中身まで出力」という具合にしたいです。

発生している問題・エラーメッセージ
現在のコードを実行すると、エラーなどはでていませんが、画像は画像でテキストはテキストで取得しています。別々でループをしていてそれぞれを最後までforeachをしてるのでだと思うでのですが、一つずつ取得する方法とかはあるのでしょうか?

PHP

1<?php 2$NL = "\n"; 3$contents = ""; 4$file_path = "a.docx"; 5$zip = new \ZipArchive(); 6 7 8if ($zip->open($file_path) === true) 9{ 10 $xml = $zip->getFromName("word/document.xml"); 11 if ($xml) 12 { 13 $dom = new \DOMDocument(); 14 $dom->loadXML($xml); 15 $paragraphs = $dom->getElementsByTagName("body"); 16 foreach ($paragraphs as $p) 17 { 18 if($p->getElementsByTagName("pic")) 19 { 20 $img_cnt = $p->getElementsByTagName("pic"); 21 foreach ($img_cnt as $imgs) 22 { 23 echo '<p>これは画像です!</p><br>'; 24 } 25 } 26 if($p->getElementsByTagName("p")) 27 { 28 $texts = $p->getElementsByTagName("t"); 29 foreach ($texts as $t) 30 { 31 $contents .= $t->nodeValue; 32 } 33 $contents .= $NL.'<br>'; 34 } 35 } 36 } 37 echo $contents; 38} 39 40return $contents; 41?> 42<!DOCTYPE html> 43<html lang="en"> 44<head> 45 <meta charset="UTF-8"> 46 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 47 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 48 <title>Document</title> 49</head> 50<body> 51 52</body> 53</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問