- PR -

XPathのロケーションパスについて

1
投稿者投稿内容
banboo
大ベテラン
会議室デビュー日: 2003/12/05
投稿数: 210
投稿日時: 2004-08-10 20:41
XPathについて質問が御座います。

下記のプログラムにおいて、XPathのルート要素にネームスペースが
入っていると、つまり、

<address>なら問題ないのですが、
<address xmlns="urn:oasis:names:tc:xacml:1.0:context">
だと、
//item/name では指定できないようです。

どのようにすれば、指定できるのでしょうか?

ご存知の方がいらっしゃいましたらご教授御願い致します。


<?xml version="1.0" encoding="UTF-8"?>
<address xmlns="urn:oasis:names:tc:xacml:1.0:context">
<item sex="male" custid="E21099">
<name>菅井 学</name>
<access kind="email"></access>
<access kind="url">http://msugai.fc2web.com/java/</access>
<image file="msugai.png" />
</item>
<item sex="male" custid="E27989">
<name>鈴木 竜広</name>
<access kind="email">tsuzuki@hoge.foo.bar</access>
<image file="tsuzuki.png" />
</item>
<item sex="female" custid="E29435">
<name>栃原 宏枝</name>
<access kind="tel">090-xxxx-xxxx</access>
<image file="tochi.png" />
</item>
</address>

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.w3c.dom.traversal.*;
import org.apache.xpath.*;

class XPathDemo3_3 {


private static final String SUBJECTATTRIBUTE =
"//item/name";

public static void main(String[] args) {
try {
// DOMパーサ用ファクトリの生成
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
// 名前空間を認識する
factory.setNamespaceAware(true);
// DOM Documentインスタンス用ファクトリの生成
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析とDocumentインスタンスの取得
Document doc = builder.parse(args[0]);

// NodeIteratorの取得
NodeIterator nl = XPathAPI.selectNodeIterator(doc, SUBJECTATTRIBUTE);

int count = 0;
Node n;

while ((n = nl.nextNode()) != null) {
count++;

System.out.println("node_name = " + n.getNodeName());

System.out.println("node_value = " + n.getNodeValue());
System.out.println("node_value = " + n.getFirstChild().getNodeValue());
}
System.out.println("counts: " + count);

} catch (Exception e) {
e.printStackTrace();
}
}
}
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-08-10 23:50
XPathAPI.selectNodeIterator
の名前空間付きの書き方を探す、あるいは

SUBJECTATTRIBUTE =
"//*[namespace-uri()='urn:oasis:names:tc:xacml:1.0:context'
and
local-name()='item']/*[namespace-uri()='urn:oasis:names:tc:xacml:1.0:context'
and local-name()='name']";

としてみる。
1

スキルアップ/キャリアアップ(JOB@IT)