JavaScriptのXML解析についてのエラー

このQ&Aのポイント
  • 質問者は、body内に特定のXML要素を配置し、JavaScriptでその要素を解析して特定の情報を取得しようとしています。
  • しかし、実際には適切な結果が得られず、問題を抱えています。
  • 質問者は、ブラウザがIE6であることも指摘しています。
回答を見る
  • ベストアンサー

どこが間違っているのでしょうか

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 です。

  • XML
  • 回答数10
  • ありがとう数12

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.10

#9補足のXMLを使用しても問題なく実行できました。 やはり、"XML read error" になるのですね? XMLファイルをアップする時に文字コードが変換されているとか権限として読めないようになっていたりしませんか? 今回のコードとは別に、日本語を含まない凄く単純なXMLファイルだと読み込めますか? 例えば <plist><key>XXX</key></plist> のようなもの

tooton
質問者

お礼

ソースをチェックしていたところ、終了タグ"</string>"が"/string>"になっているところがありました。大変ご迷惑をおかけしました。専用のソフトを持っていたらもっと早く発見できたのですが。本当にありがとうございました。20ptまでしかないのが残念です。たくさん勉強になることがありました。

tooton
質問者

補足

>文字コードが変換されているとか… ファイルを直接アップロードしているので、そのようなことは多分ないと思いますが…。 以下の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>

その他の回答 (9)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答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版でもそうだけど、念のため) まあ、そういう不安要素を消しておくこと(原因をなるべく限定すること)がこういう場合には大事ですね。

tooton
質問者

補足

フルパスを指定してみましたが、やはり同じ結果でした。よくチェックしているので大文字小文字などの間違いは絶対ないと思います。 実際の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>

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答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 があっても正しく読み込めました。

tooton
質問者

補足

わざわざ書いてくださってありがとうございます。 ソースをメモ帳に貼り付けUTF-8で保存しました。 それと、"UTIsORG.xml"を"UTIs.xml"にかえ、 XMLファイルもUTF-8で保存し直し、エンコードの 宣言も書き直したのですが、設定してくださった エラートラップに引っかかってしまいます。 ><plist>の直下に<key>は存在できない そういえばplistの子はdictかarrayでした・・・。 それで、子をすべて<dict>で挟みました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.7

#6>どちらともエンコーディングは shift_jis を宣言しています。 そうですか、それでは、とりあえず文字コード的には問題ないですね。 #5>XML に関する ActiveX コントロールが欠けている(?)とかなんでしょうか…。 ウチの環境は、IEでデフォルトにインストールされるMSXMLより新しいのが入っていますが、 <xml id="UTIs" src="UTIs.xml" ></xml> の構文はIEでは、結構古くから使えましたから関係ないと思います。 同一フォルダにある他のファイル(例えば、画像ファイルなど)は読めますか? なんだったら、XMLDOM による読込を試してみますか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

#5>どちらもメモ帳で書いているので、エンコーディングは合っていると思います。 普通にメモ帳で作成したら、Shift_JISになってしまいますが、 文字コードUTF-8を指定して保存していますか?

tooton
質問者

補足

すみません、説明が抜けてしまいました。 途中で shift_jis で保存していたのに気がついて どちらともエンコーディングは shift_jis を宣言しています。 回答#1からその上で補足しているねで、エンコーディングは問題ないと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#4>body に埋め込んだところきちんとダイアログが表示されました。 とりあえず、スクリプトはOKということですね。(おめでとうございます。) >なぜ XML を外部参照にすると読み込めないのでしょうか…。 #1の繰り返しになりますが、DOCTYPE 部分は、削除してありますか? HTML とXMLの文字コードは、合わせてありますか?(これは関係ないかも知れません) ウチで試してみたところでは、DOCTYPE を削除したものは、読み込めましたよ。

tooton
質問者

補足

>おめでとうございます ありがとうございます。とりあえず安心します。 XML からは DOCTYPE を削除しました。 どちらもメモ帳で書いているので、 エンコーディングは合っていると思います。 XML に関する ActiveX コントロールが 欠けている(?)とかなんでしょうか…。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3>HTML ファイルと XML ファイルを変更してみましたが、同じエラーが出ます とりあえず、#3は、試されたでしょうか? 試した結果を教えてください。 #3の後段部分の場合は、XML ファイル(の変更)でなくて、 <xml id="UTIs" src="UTIs.xml" ></xml> の部分をHTML に直接(埋め込む形で)記述してみて動くかどうか試して欲しいという意味ですけど、それはやってみましたか?

tooton
質問者

補足

>HTML に直接(埋め込む形で) body に埋め込んだところきちんとダイアログが表示されました。 なぜ XML を外部参照にすると読み込めないのでしょうか…。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答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ファイルの読込に失敗していると思われます。

tooton
質問者

補足

お世話になります。HTML ファイルと XML ファイルを変更してみましたが、同じエラー(dict が宣言されていない)が出ます。HTML ファイルと同じフォルダ内に XML ファイル "UTIs.xml" を置いているのですが、パスの設定に誤りがあるのでしょうか…?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>実行すると dict が宣言されていないとエラーになります。調べてみたところ、前半の for 文内が全く実行されていないようです。というわけで、keys が空のようなのですが。 質問にあげられている当初の状態がそうです。 dict は、最初のループで始めて使われているので、 最初のループで見つからなかった場合、 次のループで参照しようとすると、宣言されていないということになります。 原因は、仰るとおり >keys = root.getElementsByTagName("key"); で該当するノードリストがない。 >if (keys[i].innerText == "UTTypeIdentifier") { if で一致すると判定できない というような理由が考えられます。 #1での回答は、これらを修正するものですが、 #1の回答の修正をした上での、補足質問でしょうか?

tooton
質問者

補足

書き漏らしてしまってすみません。はい、修正した上で実行しましたが、keys の要素数が 0 でした。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答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")を使って読み込めばいいかと思います。

tooton
質問者

補足

実行すると dict が宣言されていないとエラーになります。調べてみたところ、前半の for 文内が全く実行されていないようです。というわけで、keys が空のようなのですが。

関連するQ&A

  • ソフトウェアアップデートに関して

    現在Mac OS X10.5.8で、ソフトウェアのアップデートを要求されるのですが、 何度やってもインストールに失敗と出てしまいます。 ちなみにmacbook 2.4GHz intel Core2Duo メモリ:2G 667MHzDDR SDRAMです。 Updatesのところにはこう書いてあります。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>InstallAtLogout</key> <array> <string>zzz061-9813</string> <string>061-9211</string> <string>061-8384</string> <string>061-9556</string> <string>061-9480</string> <string>zzzz041-0061</string> <string>061-9571</string> </array> <key>ProductPaths</key> <dict/> </dict> </plist> どうすればアップデート出来ますでしょうか。 お力添え宜しくお願いします。

    • 締切済み
    • Mac
  • Mac ソフトウェアアップデートに関して

    在Mac OS X10.5.8で、ソフトウェアのアップデートを要求されるのですが、 何度やってもインストールに失敗と出てしまいます。 ちなみにmacbook 2.4GHz intel Core2Duo メモリ:2G 667MHzDDR SDRAMです。 Updatesのところにはこう書いてあります。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>InstallAtLogout</key> <array> <string>zzz061-9813</string> <string>061-9211</string> <string>061-8384</string> <string>061-9556</string> <string>061-9480</string> <string>zzzz041-0061</string> <string>061-9571</string> </array> <key>ProductPaths</key> <dict/> </dict> </plist> ディスクの修復をしてもダメでした。 どうすればアップデート出来ますでしょうか。 お力添え宜しくお願いします。

    • 締切済み
    • Mac
  • iPhone(Xcode)でPlistから読込んで画像を表示させる方法(コード)

    iPhoneのアプリを作る際に、Plistから読み込んで表示させるコードを教えてください。 例えば、 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <dict> <key>RED</key> <string>001.png</string> <key>BLUE</key> <string>002.png</string> <key>YELLO</key> <string>003.png</string> <key>PINK</key> <string>004.png</string> <key>GREEN</key> <string>005.png</string> </dict> </array> </plist> というプロパティリスト(例えば、ImageName.plist)があるとして、(実際は、<key>の件数が、500件ぐらい) トップページにTableViewのセルとして、RED,BLUE,YELLO,PINK,GREENというセルがあり、 セルを選択した際に、Plistからそのセルに対応したファイル名を読み込んで、 新しいViewにて、画像を表示させたいのですが、(REDを選択すると、新しいViewにて001.pngが表示される) 「Plistからファイル名を読み込んで、新しいViewにて、画像を表示させる」部分のコードの記述の仕方が分からず、 何度やっても、うまく動きません。 どう記述すればいいのでしょうか? ご指導のほど、よろしくお願いいたします。

  • テキストのみの場合はinnerHTMLを使うべきか

    innerHTMLはIE,Firefox,Chorme,safariでも対応しています。 innerTextやtextContentはブラウザによって対応が違いので、 /*@cc_on @if(1) innerText @else@*/ textContent /*@end@*/ のようにして対応させます。 <div></div>の中がテキストのみの場合は、どちらを使った方がよいでしょうか。 innerHTMLはよろしくないと聞いたことがあるのですが、それは <div></div>の中にタグが含まれる場合に問題が起きてくるということでしょうか。 <div>テキストテキストテキスト</div> <div>テキストテキストテキスト</div> <div>テキストテキストテキスト</div> getElementsByTagName('div')[1].innerHTML getElementsByTagName('div')[1]./*@cc_on @if(1) innerText @else@*/ textContent /*@end@*/

  • アコーディオン風のtableviewの遷移について

    現在、アコーディオン風の階層的なtableviewからタップで画面を遷移するコードを作っています。 一番最初にでてくる画面のセルにAとBがでてきて、AをタップするとA⇨Item1,Item2,Item3,Bをタップすると B⇨Item1,Item2,Item3というように各々セルがでてくるようにしています。その際、コードはdidSelectRowAtIndexPathメソッドに書いてあります。 そこで、次にItemのセルをタップすると、そのタップしたItemに相当する番号(プロパティリストを読み込む)に合わせて画面が遷移するようにしたいのですが、その方法がわかりません。 (didSelectRowAtIndexPathのところに書くと、セルのAやBをタップした時点で画面が遷移してしまい、Itemのセルがでてこないです。) 色々試してはいるのですが、どのように書いたらいいか、わからなくています。 もし、宜しければ、お手数おかけしますがご教授頂けたら幸いです。 以下、コードです。 Xcodeは5.0を使用しています。 @property (nonatomic, retain) NSArray *arrayOriginal; @property (nonatomic, retain) NSMutableArray *arForTable; //ここで、プロパティリストを読み込んでいます。 NSDictionary *dTmp=[[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"data1" ofType:@"plist"]]; self.arrayOriginal=[dTmp valueForKey:@"Objects"]; self.arForTable=[[NSMutableArray alloc] init] ; [self.arForTable addObjectsFromArray:self.arrayOriginal]; - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ; } cell.textLabel.text=[[self.arForTable objectAtIndex:indexPath.row] valueForKey:@"name"]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; NSDictionary *d=[self.arForTable objectAtIndex:indexPath.row]; if([d valueForKey:@"Objects"]) { NSArray *ar=[d valueForKey:@"Objects"]; BOOL isAlreadyInserted=NO; for(NSDictionary *dInner in ar ){ NSInteger index=[self.arForTable indexOfObjectIdenticalTo:dInner]; isAlreadyInserted=(index>0 && index!=NSIntegerMax); if(isAlreadyInserted) break; } if(isAlreadyInserted) { //miniMizeThisRowでAやBが閉じるようにしています。 [self miniMizeThisRows:ar]; } else { NSUInteger count=indexPath.row+1; NSMutableArray *arCells=[NSMutableArray array]; for(NSDictionary *dInner in ar ) { [arCells addObject:[NSIndexPath indexPathForRow:count inSection:0]]; [self.arForTable insertObject:dInner atIndex:count++]; } //ここでAやBが開いて相当するItemがでるようにしています。 [tableView insertRowsAtIndexPaths:arCells withRowAnimation:UITableViewRowAnimationFade]; } } //閉まる際のメソッドです。 -(void)miniMizeThisRows:(NSArray*)ar{ for(NSDictionary *dInner in ar ) { NSUInteger indexToRemove=[self.arForTable indexOfObjectIdenticalTo:dInner]; NSArray *arInner=[dInner valueForKey:@"Objects"]; if(arInner && [arInner count]>0){ [self miniMizeThisRows:arInner]; } if([self.arForTable indexOfObjectIdenticalTo:dInner]!=NSNotFound) { [self.arForTable removeObjectIdenticalTo:dInner]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject: [NSIndexPath indexPathForRow:indexToRemove inSection:0] ] withRowAnimation:UITableViewRowAnimationFade]; }}} プロパティリストです。 <dict> <key>Objects</key> <array> <dict> <key>name</key> <string>A</string> <key>level</key> <integer>0</integer> <key>Objects</key> <array> <dict> <key>name</key> <string>Item1</string> <key>level</key> <integer>3</integer> </dict> <dict> <key>name</key> <string>Item2</string> <key>level</key> <integer>1</integer> </dict> <dict> <key>name</key> <string>Item3</string> <key>level</key> <integer>1</integer> </dict> </array> </dict> <dict> <key>name</key> <string>B</string> <key>level</key> <string></string> <key>Objects</key> <array> <dict> <key>name</key> <string>Item1</string> <key>level</key> <integer>0</integer> </dict> <dict> お手数おかけしまして恐縮ですが、宜しくお願い致します。

  • NN で XML を使いたい

    次のスクリプトを、NN でも動作するようにしたいのですが、 どのようにすればいいのでしょうか。 (場合分けは省略してくださって構いません) head タグ内の script タグ内 nodes = eList.XMLDocument.getElementsByTagName("date"); len = nodes.length; for (i=0; i<len; i++) { dates[i] = nodes[i].text; areas[i] = nodes[i].nextSibling.text; } body タグ内 <xml id="eList" src="exception.xml" /> よろしくお願い致します。

  • C#の定数用クラスについて

    定数用のクラスを宣言し、定数を取得してxmlファイルからノードが読み込めません。 xmlファイル(set.xml) <?xml version="1.0" encoding="utf-8"?> <Setting> <!--メインフォーム--> <mainForm> <Width>400</Width> </mainForm> </Setting> 定数用クラス(nsConst.cs) namespace nsConst{ class setttingConst{ public readonly string FORM_NAME = "mainForm"; public readonly string TD_WIDTH = "Width"; } xml用クラス(nsxmlReWriter.cs) namespace nsxmlReWriter{ class xmlReWriter { public String read(String element1, String element2) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(@"c:\\test\set.xml"); string ret = null; try { //Rootの取得 XmlElement Root = xml.DocumentElement; //子ノードの取得 XmlNodeList child = Root.GetElementsByTagName(element1); //該当ありの場合 if (child.Count > 0) { XmlElement gchild = (XmlElement)child.Item(0); if (gchild.GetElementsByTagName(element2).Count > 0) { ret = gchild.GetElementsByTagName(element2).Item(0).InnerText; } } } catch (Exception ex) { throw new Exception(ex.Message); } return ret; } } //ここから定数、xmlクラスを呼び出す。 MainLogic.cs namespace nsMainLogic{ class MainLogic{ private void init(){ public readonly string FORM_NAME1 = "mainForm"; public readonly string TD_WIDTH1 = "Width"; setttingConst con = new setttingConst(); xmlReWriter xmlRw = new xmlReWriter(); string width1 = xmlRw.read(con.FORM_NAME,con.TD_WIDTH); //(1) string width2 = xmlRw.read(FORM_NAME1,TD_WIDTH1); //(2) : 省略 : } } } (1)ではxmlファイルを読み込んだ結果がnullなってしまい値が取れません。 (2)では値がとれます。 わかりましたらよろしくお願いします。

  • vb6 XMLファイル出力について<S></S>

    vb6にてXMLファイル出力のプログラムを作成しています。 XMLファイル内容 <?xml version="1.0" encoding="UTF-8"?> <root> <key>AA</key> <string>aa</string> <key>BB</key> <string/> </root> 上記の<string/>の部分を<string></string>のように出力したいのですが、 どうしても上手くいきません。 下記にソースを記載します。 何か少しでもお分かりになる情報がありましたらご教授願いします。 よろしくお願いします。 Dim xmlDoc As MSXML2.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(50) As IXMLDOMNode '要素 Dim attr As MSXML2.IXMLDOMAttribute '属性 'XMLドキュメントを作成 Set xmlDoc = New MSXML2.DOMDocument 'XML宣言を追加 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<root>要素を追加 Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "")) '<key>要素を追加 Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(2).Text = "AA" '<string>要素を追加 Set node(3) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(3).Text = "aa" '<key>要素を追加 Set node(4) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(4).Text = "BB" '<string>要素を追加 Set node(5) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(5).Text = "" 'XMLドキュメントの出力 Dim strXMLFile As String strXMLFile = Format(Date, "yyyymmdd") & Format(Time, "hhmmss") xmlDoc.save ("C:TEST\TEST.xml") '終了処理 If Not xmlDoc Is Nothing Then Set xmlDoc = Nothing If Not xmlPI Is Nothing Then Set xmlPI = Nothing

  • スマートフォンで動かない

    http://yoneyone.my-sv.net/XmlSelectBox.htm ページですが以下のjavascriptを修正しスマートフォンで動かす事は可能でしょうか? 解決できない場合、スマートフォンで動かないjavascriptを記述していると思うのですが、 原因ってなんなのでしょうか? 以下がjavascriptです。 function xmlselectbox(id,xml_url,key,func){ var callback_func=func; var outarea=document.querySelector(id); var xml={}; var items=[]; var XHR= new XMLHttpRequest(); while(outarea.hasChildNodes()){ outarea.removeChild(outarea.lastChild); } //XMLのロード(エラー処理省略) XHR.open("GET",xml_url,false); XHR.send(null); if(XHR.status == 200) xml=XHR.responseXML; //if(xml.hasOwnProperty("SelectionLanguage")) //IEは使えない if(typeof xml.hasOwnProperty === "undefined") //とりあえず xml.setProperty("SelectionLanguage","XPath"); //IEにのみ必用 //最初のSELECTBOX生成 items=getitem("/descendant::node()/child::"+key,xml); var first_contener=document.createElement("div"); var first_selectbox=document.createElement("select"); first_selectbox.setAttribute("name",key); first_selectbox.add(new Option(key+"を選択してください","default"),null); for(var i=0;i<items.length;i++){ first_selectbox.add(new Option(items[i].firstChild.nodeValue,items[i].firstChild.nodeValue),null); } //イベント追加 first_selectbox.onchange=select_change(first_selectbox,xml,outarea); first_contener.appendChild(document.createTextNode(key+":")); first_contener.appendChild(first_selectbox); outarea.appendChild(first_contener); first_selectbox.selectedIndex=0; //SELECTBOXをどんどん作成 function select_change(selectbox,xml,outarea){ return function(){ var items=[]; items=getitem("/descendant-or-self::node()/child::" + selectbox.name + "[contains(self::node()/text(),'" + selectbox.value + "')]/child::*",xml); /* *********************************************************************************** normalize-space()は空白をtrimするだけ。 OK items=getitem("/descendant-or-self::node()/child::" + selectbox.name + "[normalize-space(self::node()/text())='" + selectbox.value + "']/child::*",xml); OK items=getitem("//"+selectbox.name+"[normalize-space(./text())='"+selectbox.value+"']/*",xml); ×? items=getitem("/descendant-or-self::" + selectbox.name +"[normalize-space(.)= '" + selectbox.value + "']/*",xml); */ if(items.length>0){ if(selectbox.parentNode.nextSibling){ if(selectbox.parentNode.nextSibling.lastChild.getAttribute("name")==items[0].nodeName) outarea.removeChild(selectbox.parentNode.nextSibling); } var next_contener=document.createElement("div"); var next_selectbox=document.createElement("select"); next_selectbox.setAttribute("name",items[0].nodeName); next_selectbox.add(new Option(items[0].nodeName+"を選択してください","default"),null); for(var i=0;i<items.length;i++){ next_selectbox.add(new Option(items[i].firstChild.nodeValue,items[i].firstChild.nodeValue),null); } //イベント追加 next_selectbox.onchange=select_change(next_selectbox,xml,outarea); next_contener.appendChild(document.createTextNode(items[0].nodeName+":")); next_contener.appendChild(next_selectbox); if(selectbox.parentNode.nextSibling){ outarea.insertBefore(next_contener,selectbox.parentNode.nextSibling); }else{ outarea.appendChild(next_contener); } next_selectbox.selectedIndex=0; }else{ if(typeof callback_func != "undefined") callback_func(selectbox.getAttribute("name"),selectbox.value); } } } //XPATHで検索 function getitem(xpath,xml){ var nodeValues=[]; var NodeList,Nodelength; try{ NodeList = xml.evaluate(xpath,xml,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null); }catch(e){ NodeList = xml.selectNodes(xpath); } Nodelength=NodeList.snapshotLength||NodeList.length; for(var i=0;i<Nodelength;i++){ nodeValues[i]=(typeof(NodeList.snapshotItem)==='undefined')?NodeList.item(i):NodeList.snapshotItem(i); //console.log(nodeValues[i]); } return nodeValues;

  • XML(DTD)の<!ENTITYを読み込むには?

    Perlで、XMLのDTD内の、 たとえば以下のような   ↓ <!ENTITY rt4 "ルーチン4"> (キー”rt4”と、値”ルーチン4”)を、 読み込むには、どうすればよいのでしょうか? 単純にXML(DTD)をテキストファイルとしてオープンして、 正規表現などで読み込むのではなく、 この<!ENTITY~ タグを利用して、 簡単に読み込める方法があるのでは? と思い、ネット上を探しておりましたが、 具体的な方法が見つけられなかった為、 ご質問させていただきました。 よろしくお願いします。

    • ベストアンサー
    • Perl