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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

7322閲覧

[HTMLタグ]xmllintでエラー

dlrowolleh

総合スコア120

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/01/17 16:28

編集2022/01/12 10:55

###前提・実現したいこと
Xmllintでファイルの中を見ようと思っています。

hoge.html

がどうなっているのかを解析したいのですが、やり方がよくわかりませんでした。

###発生している問題・エラーメッセージ

$ xmllint --shell --html hoge.html

とすると

encoding error : input conversion failed due to input error, bytes 0xB0 0x97 0xE6 0xB1 encoding error : input conversion failed due to input error, bytes 0xB0 0x97 0xE6 0xB1 I/O error : encoder error

と出ました。
その後、

/ >

と端末上に表示されます。

エラーコードで検索してもよくわかりませんでした。
###該当のソースコード

HTML

1 1 <html> 2 2 <head> 3 3 <title>ホームページのタイトル</title> 4 4 <link rel="stylesheet" media="all" href="Styles.css" type="text/css"> 5 5 <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> 6 6 <script language="javascript"> 7 7 <!-- 8 8 function Check(){ 9 9 ▸-if(document.Form1.Err.value!=""){ 10 10 ▸-▸-parent.location="ErrMsg.php?Err="+document.Form1.Err.value; 11 11 ▸-} 12 12 ▸-▸- 13 13 } 14 14 --> 15 15 </script> 16 16 17 17 </head> 18 18 19 19 <body MS_POSITIONING="GridLayout" class="bodyInfo" onLoad="Check()"> 20 20 <form name="Form1" action=""> 21 21 <input type="hidden" name="Err" value=""> 22 22 ▸-<table border="0" cellpadding="0" cellspacing="0" style="position:absolute; top:0px; left:5px;"> 23 23 ▸- <tr> 24 24 ▸-<td> 25 25 ▸-▸-<table style="font-size:12px;" border="1" class="hyoMenu" width="870"> 26 26 ▸-▸-▸-▸-▸-<tr align="right"> 27 27 ▸-▸-▸-▸-<td width="40" bgcolor="#FFFFCC">2017</td> 28 28 ▸-▸-▸-▸-<td width="20" bgcolor="#FFFFCC">01</td> 29 29 ▸-▸-▸-▸-<td width="20" bgcolor="#FFFFCC">17</td> 30 30 ▸-▸-▸-▸-<td width="20" bgcolor="#FFFFCC">19</td> 31~省略~ 32 4327 ▸-▸-▸-▸-▸-▸-▸- 33 4328 ▸-</table> 34 4329 ▸-</td> 35 4330 </tr></table> 36 4331 </form> 37 4332 </body> 38 4333 </html> 39 40

###試したこと
GoogleCrhome
で右クリック→要素の調査→Copy→CopyXpathとしたときは

/html/body/form/table/tbody/tr/td/table/tbody/tr[1]/td[1]

と取得できました。

また、

$ hoge.html

HTML

1<frame name="Title" src="Data.php?MstCode=0123456&Time=2017011724" scrolling="no">

となっているところのsrc=
Data.php?MstCode=0123456&Time=2017011724というファイルです。

Xmllintに文字エンコードに関するオプション

xmllint --encodeでできるようでした。
なので、

xmllint --shell --encode utf-8 hoge.html

としてみたのですが、

hoge.html:17: parser error : Opening and ending tag mismatch: META line 5 and head </head> ^ hoge.html:4331: parser error : Opening and ending tag mismatch: input line 21 and form </form> ^ hoge.html:4332: parser error : Opening and ending tag mismatch: form line 20 and body </body> ^ hoge.html:4333: parser error : Opening and ending tag mismatch: body line 19 and html </html> ^ hoge.html:4334: parser error : Premature end of data in tag link line 4 hoge.html:4334: parser error : Premature end of data in tag head line 2 hoge.html:4334: parser error : Premature end of data in tag html line 1

と表示されました。

$ xmllint --shell --encode CP932 hoge.html

また、としてみたところ、

hoge.html:17: parser error : Opening and ending tag mismatch: META line 5 and head </head> ^ hoge.html:4331: parser error : Opening and ending tag mismatch: input line 21 and form </form> ^ hoge.html:4332: parser error : Opening and ending tag mismatch: form line 20 and body </body> ^ hoge.html:4333: parser error : Opening and ending tag mismatch: body line 19 and html </html> ^ hoge.html:4334: parser error : Premature end of data in tag link line 4 hoge.html:4334: parser error : Premature end of data in tag head line 2 hoge.html:4334: parser error : Premature end of data in tag html line 1

エンコードは何を指定すれば良さそうですか?(解決?)
エンコードとは関係なさそうなエラーも出てしまったようですが、どのように対処すれば良さそうでしょうか?
###追記

$ xmllint --shell --encode utf-8 hoge.html

↓から

$ xmllint --shell --encode EUC-JP hoge.html

としてみましたが、エラーは変わりませんでした。

hoge.html:17: parser error : Opening and ending tag mismatch: META line 5 and head </head> ^ hoge.html:4331: parser error : Opening and ending tag mismatch: input line 21 and form </form> ^ hoge.html:4332: parser error : Opening and ending tag mismatch: form line 20 and body </body> ^ hoge.html:4333: parser error : Opening and ending tag mismatch: body line 19 and html </html> ^ hoge.html:4334: parser error : Premature end of data in tag link line 4 hoge.html:4334: parser error : Premature end of data in tag head line 2 hoge.html:4334: parser error : Premature end of data in tag html line 1

となりました。
何が原因だと考えられるのでしょうか...。
###追記

hoge.htmlxmllintで解析しようとしているファイル)
はもともと、
サイトのHTMLで
frameタグのsrc属性で関連付けられて
表示されていたものです。
また、閉じタグがないためエラーが出ているとのことですが、
HTMLにて終了タグがいるたぐいらないタグ
によると、
linkタグにはそもそも閉じタグは無いということらしいです…。
正しいファイルでも閉じタグが無いと
xmllintはエラーを吐き出すのなら、閉じタグをつければ良いと思うのですが、
どこにつけるべきでしょうか…?
タグは</link>で良いですか…?

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答2

0

encoding error
と出ているので、文字のエンコードに失敗しているのだと思います。
Xmllintに文字エンコードに関するオプションはありませんか?

投稿2017/01/17 16:44

mugicya

総合スコア1046

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

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

dlrowolleh

2017/01/17 17:14

ご回答いただきありがとうございます。 >Xmllintに文字エンコードに関するオプション は xmllint --encodeでできるようでした。 なので、 xmllint --shell --encode utf-8 hoge.html としてみたのですが、 hoge.html:17: parser error : Opening and ending tag mismatch: META line 5 and head </head> ^ hoge.html:4331: parser error : Opening and ending tag mismatch: input line 21 and form </form> ^ hoge.html:4332: parser error : Opening and ending tag mismatch: form line 20 and body </body> ^ hoge.html:4333: parser error : Opening and ending tag mismatch: body line 19 and html </html> ^ hoge.html:4334: parser error : Premature end of data in tag link line 4 hoge.html:4334: parser error : Premature end of data in tag head line 2 hoge.html:4334: parser error : Premature end of data in tag html line 1 と表示されました。 エンコードは何を指定すればいいのでしょうか...? エンコードとは関係なさそうなエラーも出てしまったようですが、どのように対処すれば良さそうでしょうか...?
Y.H.

2017/01/18 02:53

content="text/html; charset=EUC-JP" なので EUC-JPじゃないんですか?
dlrowolleh

2017/01/18 03:16

Y.H.さん コメントいただきありがとうございます。 ›content="text/html; charset=EUC-JP" なので EUC-JPじゃないんですか? $ xmllint --shell --encode utf-8 hoge.html          ↓から $ xmllint --shell --encode EUC-JP hoge.html としてみましたが、エラーは変わりませんでした。 hoge.html:17: parser error : Opening and ending tag mismatch: META line 5 and head </head> ^ hoge.html:4331: parser error : Opening and ending tag mismatch: input line 21 and form </form> ^ hoge.html:4332: parser error : Opening and ending tag mismatch: form line 20 and body </body> ^ hoge.html:4333: parser error : Opening and ending tag mismatch: body line 19 and html </html> ^ hoge.html:4334: parser error : Premature end of data in tag link line 4 hoge.html:4334: parser error : Premature end of data in tag head line 2 hoge.html:4334: parser error : Premature end of data in tag html line 1 となりました。 何が原因だと考えられるのでしょうか...。
Y.H.

2017/01/18 03:30

あぁ、「文字コードのエラーについて」という質問については解決してるんですね。 単純にxmllint の結果としてxmlとしてみた時に構造にエラーがありますよというメッセージですね。 「<link rel="stylesheet" media="all" href="Styles.css" type="text/css">」に閉じタグが無いですよというxmllint空の指摘です。
dlrowolleh

2017/01/18 08:00

ありがとうございます! 分かりやすくしていただき、助かります。 hoge.html(xmllintで解析しようとしているファイル) はもともと、 frameタグのsrc属性で関連付けられて サイトに表示されていたものです。 また、閉じタグがないためエラーが出ているとのことですが、 http://vllv.us/Junk/htmlTag/ によると、 linkタグにはそもそも閉じタグは無いということらしいです…。 正しいファイルでも閉じタグが無いと xmllintはエラーを吐き出すのなら、閉じタグをつければ良いと思うのですが、 どこにつけるべきでしょうか…? タグは</link>で良いですか…? 長文失礼しました。 度々すみません。 何卒ご教授いただけましたら幸いです。
Y.H.

2017/01/18 09:39

kei344さんの回答およびicchiiさんのコメントが参考になると思います
guest

0

linkタグにはそもそも閉じタグは無いということらしいです…。

xmllint はXML文書として正しいかを判断するものなのでは?HTMLでは省略可能な閉じタグもXHTMLでは必須です。

【XHTMLの書き方と留意点】
http://www.kanzaki.com/docs/html/xhtml1.html

空要素のタグは />で閉じる
また、HTMLのimg要素やbr要素のように、内容モデルを持たない空要素(HTMLでは開始タグしか使わないもの)は、XMLにおいては<br/>という具合に、タグを閉じるときに /> を使わなければなりません(空要素タグと呼ばれています)。ただし、この書式ではHTMLブラウザがタグを正しく認識できない可能性があるので、/ の前にスペースを置いて、 <br /> のように記述します。

投稿2017/01/18 08:26

kei344

総合スコア69364

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

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

kei344

2017/01/18 09:49

情報ありがとうございます。私も詳しくないためとても助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問