アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のindex.xmlのようなXML文書があるとして、Javaプログラム
で<Title></Title>の中身を抜き出したいのですが、うまく取り
出せません。

【index.xml】
<?xml version='1.0' encoding='UTF-8' ?>
<?xml-stylesheet type="text/xsl" href="../../../_sys/style.xsl"?>
<RDF xmlns:r="○○"
xmlns:d="○○"
xmlns:s="○○"
xmlns="○○">
<ExternalPage about="http://www.pref.iwate.jp/~hp0920/">
<d:Title><s:char code="39">'</s:char>99岩手総体</d:Title>
</ExternalPage>
</RDF>

【ソース】
public class Example {
public static void main(String[] args) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("index.xml"));
Element root = doc.getDocumentElement();
NodeList ExternalPageLst = root.getElementsByTagName("ExternalPage");
for (int j=0; j < ExternalPageLst.getLength() ; j++) {
Element ExternalPageEle = (Element)ExternalPageLst.item(j);
NodeList TitleLst = ExternalPageEle.getElementsByTagName("d:Title");
for (int k=0; k < TitleLst.getLength() ; k++) {
Element TitleEle = (Element)TitleLst.item(k);
NodeList CharLst = ExternalPageEle.getElementsByTagName("s:char");
Element CharEle = (Element)CharLst.item(0);
String Char = CharEle.getFirstChild().getNodeValue();
String Title = TitleEle.getFirstChild().getNodeValue();
System.out.println(Title);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
【実行結果】
null

以上、宜しくお願いします。

A 回答 (1件)

> NodeList TitleLst = ExternalPageEle.getElementsByTagName("d:Title");



恐らくここが問題です。

XMLでは要素名の':'より前の部分はnamespaceと呼ばれ特殊な扱いを受けます。XMLをプログラムで扱う場合,XML Namespace に関する知識は必須ですのですので,勉強しておくことをお勧めします。

http://www.utj.co.jp/XML/sta/namespace.html
http://www.w3.org/TR/REC-xml-names/

若干ヒントを書いておくと,getElementsByTagNameではなく,getElementsByTagNameNSで試してみてください。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/or …

参考URL:http://www.w3.org/TR/REC-xml-names/
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!