全子孫ノードを探査するループ処理

全ての子ノード、さらにその配下の孫ノードを順次呼び出し探査するスクリプト。XML文書のルート要素以下に含まれる全てのノードを調べます。

[サンプルHTML文書を表示](下のフレームに)

2つめの例は、全ての子孫ノードを調べ、Textノードだけその値を取り出す。

XMLソース

<?xml version="1.0" encoding="Shift_JIS" ?>
<root>
<title>TEST</title>
<data1>D-1</data1>
<data2></data2>
<!-- コメント-->
<data3>D-3
<data31>D3-1
</data31>
<data32>D3-2
<data32a>D3-2-a</data32a>
</data32>
</data3>
</root>

HTMLソース

<SCRIPT language="JavaScript"><!--
var result;
function Test(n){
var xmlobj=new ActiveXObject("MSXML2.DOMDocument");
xmlobj.async=false;
xmlobj.load("child02.xml");
result = "";
if(n==1)result=LoopChilds(xmlobj.documentElement);
if(n==2)result=LoopTexts(xmlobj.documentElement);
view.innerHTML=result;
}
function LoopChilds(target){ //全子孫ノードを探査
var childs=target.childNodes;
if(childs.length != 0){
for(var i=0;i<childs.length;i++){
result += childs(i).nodeName + "::" + childs(i).nodeValue+"<br>";
var nextChilds = childs(i).childNodes;
if(nextChilds.length != 0)LoopChilds(childs(i));
}
}
return result;
}
function LoopTexts(target){ //Textノードだけ取り出す
var childs=target.childNodes;
if(childs.length != 0){
for(var i=0;i<childs.length;i++){
if(childs(i).nodeType == 3)result += childs(i).nodeValue+"<br>";
var nextChilds = childs(i).childNodes;
if(nextChilds.length != 0)LoopTexts(childs(i));
}
}
return result;
}
//--></SCRIPT>
</head>
<body>
<button onclick="Test(1)">全ての子孫ノードをループ探査する</button>
<button onclick="Test(2)">全てのTextノードだけを取り出す</button>
<div>ループの結果は:<hr><p id="view"></p></div>

end(05/5/5)