- - PR -
XPathのロケーションパスについて
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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(); } } } |
|
投稿日時: 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
