11-DOM XML †RSS1.0?のXMLをDOMで読み込んでみます。 PHP編 †全部タグ名で検索してもいいんだろうけど、 ★ソース <?php
if(! $dom = domxml_open_file(dirname($_SERVER['SCRIPT_FILENAME']) . '/rss.xml')){
die('RSSファイルが見つかりません。');
}
echo "<table border=\"1\">";
//ルートエレメント
$root_el = $dom -> document_element();
//itemタグのエレメント
$item_els = $root_el -> get_elements_by_tagname('item');
foreach($item_els as $item_el){
//itemタグ内の子ノード
$nodes = $item_el -> child_nodes();
foreach($nodes as $node){
//ノードの種類がエレメントのもの
if($node -> node_type() == XML_ELEMENT_NODE){
//タグ名から変数に代入
switch($node -> tagname()){
case 'title' :
$title = $node -> get_content();
break;
case 'link'
$link = $node -> get_content();
break
case 'date' :
$date = substr($node -> get_content(), 0, 10);
break;
}
}
}
//表示
echo "<tr>";
echo "<td>$date</td><td>";
echo "<a href=\"$link\">$title</a></td>";
echo "</tr>";
}
echo "</table>";
?>
★結果
.NET編 †.NETでXMLをDOMで扱うには、System.Xml.XmlDocument?を使います。 <%@ Page Language="C#" %>
<%@ import Namespace="System.Xml" %>
<%@ import Namespace="System.Data" %>
<script runat="server">
private void page_load(Object sender, EventArgs e){
//XMLファイル読み込み
XmlDocument doc = new XmlDocument();
doc.Load(System.IO.Path.GetDirectoryName(Request.PhysicalPath) + "\\index.xml");
//itemエレメント検索
XmlNodeList item_els = doc.GetElementsByTagName("item");
//データテーブル作成
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("date"));
dt.Columns.Add(new DataColumn("title"));
dt.Columns.Add(new DataColumn("url"));
//itemタグ
foreach(XmlNode item_el in item_els){
//データ列?作成
DataRow dr = dt.NewRow();
//itemタグ内の子ノード
XmlNodeList nodes = item_el.ChildNodes;
foreach(XmlNode node in nodes){
//ノードの種類がエレメントのもの
if(node.NodeType == XmlNodeType.Element){
//タグ名から内容を取得
switch(node.Name){
case "title" :
dr["title"] = node.InnerText;
break;
case "link" :
dr["url"] = node.InnerText;
break;
case "dc:date" :
dr["date"] = node.InnerText.Substring(0, 10);
break;
}
}
}
//データ列に追加
dt.Rows.Add(dr);
}
//データテーブルをバインド
DataGrid1.DataSource = dt;
DataGrid1.DataBind();
}
</script>
<html>
<head>
<title>DOM XML</title>
</head>
<body>
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" ShowHeader="False">
<Columns>
<asp:BoundColumn DataField="date" />
<asp:HyperLinkColumn DataNavigateUrlField="url" DataTextField="title" />
</Columns>
</asp:DataGrid>
</body>
</html>
ASP編 †MSXML2.DOMDocumentを使うと、XPathが使えます。 <%
Option Explicit
Dim dom, result, item_els, item_el, node
Dim title, link, date
Set dom = Server.CreateObject("MSXML2.DOMDocument")
result = dom.load(Server.MapPath("rss.xml"))
If Not result Then
Response.Write "RSSファイルが見つかりません。"
Response.End
End If
Response.Write "<table border=""1"">"
Set item_els = dom.selectNodes("rdf:RDF/item")
For Each item_el In item_els
For Each node In item_el.childNodes
Select Case node.nodeName
Case "title"
title = node.text
Case "link"
link = node.text
Case "dc:date"
date =Mid(node.text, 1, 10)
End Select
Next
Response.Write "<tr>"
Response.Write "<td>" & date & "</td>"
Response.Write "<td><a href=""" & link & """>" & title & "</a></td>"
Response.Write "</tr>"
Next
Response.Write "</table>"
%>
JavaScript編 †★HTML <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script language="JavaScript" type="text/javascript" src="rss.js"></script>
<style type="text/css">table, th, td{border:1px solid #ccc;}</style>
</head>
<body>
<table>
<thead><th>日付</th><th>タイトル</th></thead>
<tbody></tbody>
</table>
</body>
</html>
★rss.js window.attachEvent('onload', loadEvent);
function loadEvent(e){
//HTML内の<tbody>タグ
var tbody = document.getElementsByTagName('tbody')[0];
//domオブジェクト作成
var domXml = new ActiveXObject("Microsoft.XMLDOM");
domXml.async = false;
domXml.load('rss.xml');
//itemタグ
var itemNodes = domXml.getElementsByTagName('item');
for(i=0; i<itemNodes.length; i++){
var nodes = itemNodes[i].childNodes;
var title, link, date;
for(j=0; j<nodes.length; j++){
switch(nodes[j].tagName){
case 'title' : title = nodes[j].firstChild.nodeValue; break;
case 'link' : link = nodes[j].firstChild.nodeValue; break;
case 'dc:date' : date = nodes[j].firstChild.nodeValue; break;
}
}
tbody.appendChild(createTr(title, link, date));
}
}
function createTr(title, link, date){
//アンカー
var src = document.createAttribute('href');
src.nodeValue = link;
var a = document.createElement('a');
a.setAttributeNode(src);
a.appendChild(document.createTextNode(title));
//セル1
var td1 = document.createElement('td');
td1.appendChild(document.createTextNode(date.substr(0, 10)));
//セル2
var td2 = document.createElement('td');
td2.appendChild(a);
//行
var tr = document.createElement('tr');
tr.appendChild(td1);
tr.appendChild(td2);
return tr;
}
感想・質問等どうぞ †Tag: Tips PHP .NET JavaScript |