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

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

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

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

JavaScript

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

Q&A

解決済

2回答

1367閲覧

JavaScriptによる、XML空白要素からの属性取得

Ytaka

総合スコア35

XML

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

JavaScript

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

0グッド

0クリップ

投稿2021/12/22 01:34

レスポンスをXMLの空白要素で返すアプリケーションがあり、そのレスポンスから属性情報を取得したいです。

レスポンスとして返ってくるXML※ClientIdをJSで取得したい。

xml

1<?xml version="1.0"?> 2<RegisterClientResponse ResponseCode="0" ClientId="799df50f-2006-49ac-b567-55628000e2f1" />

getElementByTagName
での取得を試みましたが、うまくいかず・・・
妙案があればぜひアドバイスお願いします。

試したHTMLソース
アラートから、正しいxmlが返ってきていることは確認済です。

html

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8" /> 5 <title></title> 6 7 <script type="text/javascript"> 8 function getData() { 9 var xmlhttp = new XMLHttpRequest(); 10 xmlhttp.open("GET", "http://127.0.0.1:61234/app/api/registerclient?name=foo"); 11 xmlhttp.send(); 12 13 xmlhttp.onreadystatechange = function () { 14 if (xmlhttp.readyState == 4) { 15 if (xmlhttp.status == 200) { 16 var elem = document.getElementById("output"); 17 18 window.alert(xmlhttp.documentElement); 19 elem.innerHTML += "----- getElementsByTagName -----<br/>"; 20 elem.innerHTML += "1<br/>"; 21 var docelem = xmlhttp.responseText.documentElement; 22 elem.innerHTML += "docelem=" + docelem + "<br/>"; 23 elem.innerHTML += "response=" + xmlhttp.responseXML + "<br/>"; 24 var chkresponsecode = docelem.hasAttribute("ResponseCode"); 25 var responsecode = docelem.getElementsByTagName("RegisterClientResponse").getAttribute("ResponseCode"); 26 console.log(chkresponsecode); 27 elem.innerHTML += "chkresp=" + chkresponsecode + "<br/>"; 28 <!--var sourcelineorg = xmlhttp.responseXML.getElementsByTagName("RegisterClientResponse");--> 29 <!--var sourceline = xmlhttp.responseXML.getElementsByTagName("RegisterClientResponse").getAttribute("ClientId");--> 30 <!--var clientid = sourceline.getAttribute("ClientId");--> 31 window.alert("response=" + chkresponsecode); 32 <!--window.alert("clientid=" + clientid);--> 33 elem.innerHTML += "2<br/>"; 34 elem.innerHTML += "response:" + responsecode.xmlContent + "<br/>"; 35 <!--elem.innerHTML += "clid:" + clientid.textContent;--> 36 elem.innerHTML += "----------<br/>"; 37 } else { 38 alert("status = " + xmlhttp.status); 39 } 40 } 41 } 42 } 43 </script> 44</head> 45<body> 46 <input id="Button_Get" type="button" value="取得" onclick="getData();" /> 47 <div>受信情報</div> 48 <div id="output"></div> 49</body> 50</html>

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

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

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

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

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

int32_t

2021/12/22 01:57 編集

現状のコードでalert()とconsole.log()とid="output"要素の中身には何が表示されるのですか? あと、JavaScript コード内でのコメントは // や /* */ です。<!-- --> でも間違いとは言い切れませんが、やめたほうがよいです。
Ytaka

2021/12/22 04:08 編集

コメントありがとうございます。 alertやConsole.logは、切り分けのため取得(するはずの)属性、xml自体などを表示させています。 →最終的には全ていらなくなる。 outputの箇所は、ボタンクリック時にinner.HTMLで作成したHTMLを表示します。 コメント記載方法についても、アドバイスありがとうございます<(_ _)>
int32_t

2021/12/22 04:16

具体的にどういう文字列が表示されているのかを知りたいです。 例えば最初のalert()は「undefined」になりますよね。
Ytaka

2021/12/22 05:30

アラートは1つだけポップされ、「undefined」 html上の表示は === ----- getElementsByTagName ----- 1 docelem=undefined response=[object XMLDocument] === コンソールのエラーとしては以下が表示されていました。 === Uncaught TypeError: Cannot read properties of undefined (reading 'hasAttribute') at XMLHttpRequest.xmlhttp.onreadystatechange (sample3.html:24) 属性の読み込みが正常にできていないのだと思います。
guest

回答2

0

js

1var docelem = xmlhttp.responseText.documentElement;

docelemundefined になっているかと思います。responseText は文字列なので、documentElement というプロパティはありません。

xmlhttp.responseXML.documentElement.getAttribute('ClientId') で目的の値が取れるはずです。

投稿2021/12/22 05:27

int32_t

総合スコア21695

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

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

Ytaka

2021/12/22 08:50

ありがとうございます。こちらの方法も、ぜひトライしてみたいと思います! 先に回答いただいた方にBAつけさせていただきました<(_ _)>
guest

0

ベストアンサー

fragmentを利用しようかと思ったのですが、普通にダミーのDOMを作るだけでいけそうですね

javascript

1const xml='sample.xml'; 2fetch(xml).then(res=>res.text()).then(txt=>{ 3 const xml=Object.assign(document.createElement('xml'),{innerHTML:txt}); 4 const ClientId=xml.querySelector('RegisterClientResponse').getAttribute('ClientId'); 5 console.log(ClientId); 6});

投稿2021/12/22 02:34

編集2021/12/22 02:45
yambejp

総合スコア116734

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

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

Ytaka

2021/12/22 05:24

バッチリ取得できました!ありがとうございます。 中の処理についてはまだ不勉強なところがありますので、一つずつ理解していきたいと思います。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問