body 内に <xml id="UTIs" src="UTIs.xml"> をおき、onLoad で UTTypeGetIconsFile("public.plain-text") を呼び出すのですが、うまくいきません。実際には "public.plain-text.icons" を得たいのですが、どこが間違っているのでしょうか。
[JavaScript]
function UTTypeGetIconsFile(UTTypeIdentifier) {
roots = UTIs.XMLDocument;
keys = root.getElementsByTagName("key");
for (i=0; i<keys.length; i++) {
if (keys[i].innerText == "UTTypeIdentifier") {
if (keys[i].nextSibling.innerText == UTTypeIdentifier) {
dict = keys[i].parentNode;
}
}
}
keys = dict.getElementsByTagName("key");
for (i=0; i<keys.length; i++) {
if (keys[i].text == "UTTypeiconsFile") {
return keys[i].nextSibling.text;
}
}
}
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>public.plain-text</string>
<key>UTTypeiconsFile</key>
<string>public.plain-text.icons</string>
<!-- 実際には更に続きます -->
</dict>
<!-- この後もdictタグが続きます -->
</array>
</plist>
ブラウザは IE6 です。
No.1
- 回答日時:
試してみました。
root = UTIs.XMLDocument;
if (keys[i].text == "UTTypeIdentifier") {
if (keys[i].nextSibling.text == UTTypeIdentifier) {
に修正して、
[XML] からDOCTYPE 部分を削除すると望むような動作になりました。
<xml src="~"></xml>
でHTML文書内に埋め込む場合、DOCTYPE は、埋め込めないということだと思います。(HTML 違反になるし・)
DTD 宣言部分を削除できない場合は、
埋め込みにしないで、ActiveXObjext("Microsoft.XMLDOM")を使って読み込めばいいかと思います。
この回答への補足
実行すると dict が宣言されていないとエラーになります。調べてみたところ、前半の for 文内が全く実行されていないようです。というわけで、keys が空のようなのですが。
補足日時:2006/09/09 11:22No.2
- 回答日時:
>実行すると dict が宣言されていないとエラーになります。
調べてみたところ、前半の for 文内が全く実行されていないようです。というわけで、keys が空のようなのですが。質問にあげられている当初の状態がそうです。
dict は、最初のループで始めて使われているので、
最初のループで見つからなかった場合、
次のループで参照しようとすると、宣言されていないということになります。
原因は、仰るとおり
>keys = root.getElementsByTagName("key");
で該当するノードリストがない。
>if (keys[i].innerText == "UTTypeIdentifier") {
if で一致すると判定できない
というような理由が考えられます。
#1での回答は、これらを修正するものですが、
#1の回答の修正をした上での、補足質問でしょうか?
No.3
- 回答日時:
#2>修正した上で実行しました
以下はウチで試してみたソースです。
こちらを使ってテストしてみていただけますか?
----------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>XMLの読み出し</title>
<script type="text/javascript"><!--
function UTTypeGetIconsFile(UTTypeIdentifier) {
root = UTIs.XMLDocument;
keys = root.getElementsByTagName("key");
for (i=0; i<keys.length; i++) {
if (keys[i].text == "UTTypeIdentifier") {
if (keys[i].nextSibling.text == UTTypeIdentifier) {
dict = keys[i].parentNode;
}
}
}
keys = dict.getElementsByTagName("key");
for (i=0; i<keys.length; i++) {
if (keys[i].text == "UTTypeiconsFile") {
return keys[i].nextSibling.text;
}
}
}
window.onload=function(){
alert(UTTypeGetIconsFile("public.plain-text"));
};
//-->
</script>
</head>
<body>
<xml id="UTIs" src="UTIs.xml" ></xml>
</body>
</html>
---------------------------------------------------------------
コレでダメな場合、まずは、
<xml id="UTIs">
<plist version="1.0">
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>public.plain-text</string>
<key>UTTypeiconsFile</key>
<string>public.plain-text.icons</string>
<!-- 実際には更に続きます -->
</dict>
<!-- この後もdictタグが続きます -->
</array>
</plist>
</xml>
でテストしてみてください。
それでスクリプトが動作するようなら、XMLファイルの読込に失敗していると思われます。
この回答への補足
お世話になります。HTML ファイルと XML ファイルを変更してみましたが、同じエラー(dict が宣言されていない)が出ます。HTML ファイルと同じフォルダ内に XML ファイル "UTIs.xml" を置いているのですが、パスの設定に誤りがあるのでしょうか…?
補足日時:2006/09/10 17:10No.4
- 回答日時:
#3>HTML ファイルと XML ファイルを変更してみましたが、同じエラーが出ます
とりあえず、#3は、試されたでしょうか?
試した結果を教えてください。
#3の後段部分の場合は、XML ファイル(の変更)でなくて、
<xml id="UTIs" src="UTIs.xml" ></xml>
の部分をHTML に直接(埋め込む形で)記述してみて動くかどうか試して欲しいという意味ですけど、それはやってみましたか?
この回答への補足
>HTML に直接(埋め込む形で)
body に埋め込んだところきちんとダイアログが表示されました。
なぜ XML を外部参照にすると読み込めないのでしょうか…。
No.5
- 回答日時:
#4>body に埋め込んだところきちんとダイアログが表示されました。
とりあえず、スクリプトはOKということですね。(おめでとうございます。)
>なぜ XML を外部参照にすると読み込めないのでしょうか…。
#1の繰り返しになりますが、DOCTYPE 部分は、削除してありますか?
HTML とXMLの文字コードは、合わせてありますか?(これは関係ないかも知れません)
ウチで試してみたところでは、DOCTYPE を削除したものは、読み込めましたよ。
この回答への補足
>おめでとうございます
ありがとうございます。とりあえず安心します。
XML からは DOCTYPE を削除しました。
どちらもメモ帳で書いているので、
エンコーディングは合っていると思います。
XML に関する ActiveX コントロールが
欠けている(?)とかなんでしょうか…。
No.7
- 回答日時:
#6>どちらともエンコーディングは shift_jis を宣言しています。
そうですか、それでは、とりあえず文字コード的には問題ないですね。
#5>XML に関する ActiveX コントロールが欠けている(?)とかなんでしょうか…。
ウチの環境は、IEでデフォルトにインストールされるMSXMLより新しいのが入っていますが、
<xml id="UTIs" src="UTIs.xml" ></xml>
の構文はIEでは、結構古くから使えましたから関係ないと思います。
同一フォルダにある他のファイル(例えば、画像ファイルなど)は読めますか?
なんだったら、XMLDOM による読込を試してみますか?
No.8
- 回答日時:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>XMLの読み出し</title>
<script type="text/javascript"><!--
function UTTypeGetIconsFile(UTTypeIdentifier) {
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
stat=xmldoc.load('UTIsORG.xml');
// if(xmldoc.parseError.errorCode != 0)alert("XML read error");
if(!stat)alert("XML read error");
root = xmldoc.documentElement;
keys = root.getElementsByTagName("key");
for (i=0; i<keys.length; i++) {
if (keys[i].text == "UTTypeIdentifier") {
if (keys[i].nextSibling.text == UTTypeIdentifier) {
dict = keys[i].parentNode;
}
}
}
keys = dict.getElementsByTagName("key");
for (i=0; i<keys.length; i++) {
if (keys[i].text == "UTTypeiconsFile") {
return keys[i].nextSibling.text;
}
}
}
window.onload=function(){
alert(UTTypeGetIconsFile("public.plain-text"));
};
//-->
</script>
</head>
<body>
</body>
</html>
----------------------------------------------------------------
XMLDOM版を作ってみました。
今回XMLDOM版で気付いたのですが、
XMLDOM版では、DOCTYPE を削除しないで読み込めるはずなのですが、削除しないでは読み込めませんでした。
DTDを確認してみると、
plist の直下に<key> は、存在できないので読込エラーになります。
(<key>UTExportedTypeDeclarations</key>の部分)
それを修正してみると<xml src="…">でもDOCTYPE があっても正しく読み込めました。
この回答への補足
わざわざ書いてくださってありがとうございます。
ソースをメモ帳に貼り付けUTF-8で保存しました。
それと、"UTIsORG.xml"を"UTIs.xml"にかえ、
XMLファイルもUTF-8で保存し直し、エンコードの
宣言も書き直したのですが、設定してくださった
エラートラップに引っかかってしまいます。
><plist>の直下に<key>は存在できない
そういえばplistの子はdictかarrayでした・・・。
それで、子をすべて<dict>で挟みました。
No.9
- 回答日時:
#8>エラートラップに引っかかってしまいます。
つまり、やはり読み込めないということですね。
(case 1)パスが違っていて読めない
ファイルへのパスをフルパスで指定してみて下さい。
(ファイル名の大文字小文字が違っていないかも点検して下さい)
xmldoc.load("C:\\UTIs.xml");//ローカルの場合
xmldoc.load('http://yoursite.ne.jp/xml/UTIs.xml');//WEBの場合
(case 2)XMLの内容にまだエラーとなるものがある。
質問文のXMLではなくて、実際に使用しているモノが違うのであれば補足して下さい。
#8>XMLファイルもUTF-8で保存し直し、エンコードの宣言も書き直したのです
XMLDOM版では、それぞれのエンコードと宣言が正しければ必ずしも揃える必要はないです。(HTML版でもそうだけど、念のため)
まあ、そういう不安要素を消しておくこと(原因をなるべく限定すること)がこういう場合には大事ですね。
この回答への補足
フルパスを指定してみましたが、やはり同じ結果でした。よくチェックしているので大文字小文字などの間違いは絶対ないと思います。
実際のXMLは次のような感じです。実際は深い方のdictタグは更に多くあります。
<xml version="1.0" encoding="utf-8">
<plist version="1.0">
<dict>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>public.plain-text</string>
<key>UTTypeDescription</key>
<string>標準テキスト</string>
<key>UTTypeiconsFile</key>
<string>public.plain-text.icons</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.text</string>
</array>
<key>public.filename-extension</key>
<array>
<string>text</string>
<string>txt</string>
</array>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.compuserve.gif</string>
<key>UTTypeDescription</key>
<string>GIF イメージ</string>
<key>UTTypeiconsFile</key>
<string>com.compuserve.gif.icons</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.image</string>
</array>
<key>public.filename-extension</key>
<array>
<string>gif</string>
</array>
</dict>
</array>
</dict>
</plist>
</xml>
No.10ベストアンサー
- 回答日時:
#9補足のXMLを使用しても問題なく実行できました。
やはり、"XML read error" になるのですね?
XMLファイルをアップする時に文字コードが変換されているとか権限として読めないようになっていたりしませんか?
今回のコードとは別に、日本語を含まない凄く単純なXMLファイルだと読み込めますか?
例えば
<plist><key>XXX</key></plist>
のようなもの
この回答への補足
>文字コードが変換されているとか…
ファイルを直接アップロードしているので、そのようなことは多分ないと思いますが…。
以下のXMLで試したところ、きちんと動作しました。
やはりXMLの記述に問題があるようです。
<xml version="1.0" encoding="utf-8">
<plist version="1.0">
<dict>
<key>UTTypeIdentifier</key>
<string>public.plain-text</string>
<key>UTTypeiconsFile</key>
<string>public.plain-text.icons</string>
</dict>
</plist>
</xml>
ソースをチェックしていたところ、終了タグ"</string>"が"/string>"になっているところがありました。大変ご迷惑をおかけしました。専用のソフトを持っていたらもっと早く発見できたのですが。本当にありがとうございました。20ptまでしかないのが残念です。たくさん勉強になることがありました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseへのxmlファイル追加
-
UTF-8でエンコーディングとはど...
-
Excel(2007以降)をxml形式に変...
-
バッチファイルでテキストファ...
-
特殊記号が勝手にエスケープさ...
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
xmlファイルが上手にHTMLに変換...
-
XMLで要素が記述された順番に意...
-
昔Winnyってありましたけど、あ...
-
2分探索木の高さを求めるプロ...
-
XML、XSLTの適応エラー(IEから...
-
MSXMLを使ってノードを削除した...
-
同じタグ名の項目取得
-
VB6.0でDOMを使用して...
-
XMLファイル内のデータ(値)を変...
-
TreeViewについて
-
isnan・isnf関数が「識別子が見...
-
XMLで特殊文字を扱うにはどうし...
-
ASPで型宣言
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルでテキストファ...
-
UTF-8でエンコーディングとはど...
-
ExcelVBAで書き出した文字が化ける
-
Windowsで見かけるxmlファイル...
-
VBAでxmlファイルの置換をしたい
-
C#で使用中のファイルに別のフ...
-
XMLファイルの作り方がわかりま...
-
Excel(2007以降)をxml形式に変...
-
VBSでXMLを読込、検索結果をテ...
-
Web サイトにあるxmlファイルを...
-
XMLデータを整形して、ブラウザ...
-
DOSコマンドラインからxmlファ...
-
eclipseへのxmlファイル追加
-
DataSetのwriteXmlでのXML宣言
-
RDFファイルは何故拡張子が.rdf...
-
XmlDocument.ReadNode メソッド...
-
【アプリ開発】日本語を含むXML...
-
複数のXMLファイルからデータを...
-
JavaでXMLのNodeツリーをファイ...
-
GoogleマップでKMLが読み込めない
おすすめ情報