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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

158閲覧

javascriptを使用してxmlを読み取りhtmlで表示したいが特定のタグだけ表示できない

mememe535

総合スコア1

XML

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2024/03/20 14:23

実現したいこと

javascriptを使用してxmlを読み取りhtmlで表示したい。

発生している問題・分からないこと

AMaxタグだけ表示できずにN/Aになる。

エラーメッセージ

error

1UpdateTimeTags length: 1 2test.html:130 AMaxTags length: 0 3test.html:131 NameTags length: 1 4test.html:144 aMax for index 0: N/A

該当のソースコード

javascript

1<script> 2async function fetchAndParseXML() { 3 const xmlUrl = 'updateData3.xml'; // XMLファイルのパス 4 try { 5 const response = await fetch(xmlUrl); 6 const xmlText = await response.text(); 7 const parser = new DOMParser(); 8 const xmlDoc = parser.parseFromString(xmlText, "application/xml"); 9 10 const updateTimeTags = xmlDoc.getElementsByTagName("UpdateTime"); 11 const AMaxTags = xmlDoc.getElementsByTagName("AMax"); 12 const nameTags = xmlDoc.getElementsByTagName("Name"); // Nameタグのデータを取得 13 14 console.log("UpdateTimeTags length:", updateTimeTags.length); // ログ出力を追加 15 console.log("AMaxTags length:", AMaxTags.length); // ログ出力を追加 16 console.log("NameTags length:", nameTags.length); // ログ出力を追加 17 18 // 最初のUpdateTimeの内容だけを表示 19 if (updateTimeTags.length > 0 && nameTags.length > 0) { 20 document.getElementById("first-getDate").textContent = updateTimeTags[0].textContent; 21 } 22 23 let displayHtml = ""; 24 for(let i = 0; i < updateTimeTags.length; i++) { 25 const date = updateTimeTags[i].textContent; 26 const aMax = AMaxTags[i] ? AMaxTags[i].textContent : 'N/A'; 27 28 // ここでaMaxの値をログ出力します。 29 console.log(`aMax for index ${i}:`, aMax); // ログ出力を追加 30 31 const name = i < nameTags.length ? nameTags[i].textContent : 'N/A'; 32 // 数値部分だけを解析するためparseFloatを使う 33 const aMaxValue = parseFloat(aMax); 34 let className = ""; 35 36 if (aMaxValue >= 0.3) { 37 className = "red"; 38 } else if (aMaxValue >= 0.2) { 39 className = "blue"; 40 } else if (aMaxValue >= 0.1) { 41 className = "yellow"; 42 } 43 44 displayHtml += ` 45 <div class="data-box"> 46 <div class="channel-name">${name}</div> 47 <div class="square-frame ${className}"></div> 48 <div class="a-max">${aMax}</div> <!-- 元のAMaxの文字列を表示 --> 49 </div>`; 50 } 51 52 document.getElementById("data-container").innerHTML = displayHtml; 53 } catch (error) { 54 console.error("Error fetching XML: ", error); 55 } 56} 57 58document.addEventListener('DOMContentLoaded', (event) => { 59 fetchAndParseXML(); 60}); 61</script>

xml

1<clsViewData> 2 <Name>わに</Name> 3 <UpdateTime>2021/05/20 04:56:47</UpdateTime> 4 <SelectItem>AMax</SekectItem> 5 <AMax>0.000 (dB)</AMax> 6 </clsViewData>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

何度検証してもAMaxは存在しない扱いになりました。
それ以外のタグはちゃんと表示されます。

補足

特になし

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

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

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

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

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

guest

回答1

0

ベストアンサー

XMLファイルの構文を見なおしてみてください。
タグ名に誤記があります。
そのため、タグが閉じきれずにAMaxが見付からないのかもしれません。

投稿2024/03/20 14:33

Refrain

総合スコア537

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

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

mememe535

2024/03/20 14:37

ありがとうございます! うまくいきました!
Refrain

2024/03/20 14:40

タイポって意外とありますからね… 治ったようで何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問