The Source for Java Technology Collaboration
User: Password:



Start New Message Delete Post a Reply

Article: 
 XML Manipulation using XMLTask
Subject:  XmlTask (com.oopsconsultancy.xmltask.ant.XmlTask) bug with attributes within node
Date:  2008-01-09 20:45:52
From:  zhkl0228
Response to: XmlTask (com.oopsconsultancy.xmltask.ant.XmlTask) bug with attributes within node


update the com.oopsconsultancy.xmltask.jdk15.XPathAnalyser15 method to follow:
<font color="#000080">package</font> com<font color="#990000">.</font>oopsconsultancy<font color="#990000">.</font>xmltask<font color="#990000">.</font>jdk15<font color="#990000">;</font>

<font color="#000080">import</font> org<font color="#990000">.</font>w3c<font color="#990000">.</font>dom<font color="#990000">.</font>Document<font color="#990000">;</font>
<font color="#000080">import</font> org<font color="#990000">.</font>w3c<font color="#990000">.</font>dom<font color="#990000">.</font>Node<font color="#990000">;</font>
<font color="#000080">import</font> org<font color="#990000">.</font>w3c<font color="#990000">.</font>dom<font color="#990000">.</font>traversal<font color="#990000">.</font>NodeIterator<font color="#990000">;</font>

<font color="#000080">import</font> com<font color="#990000">.</font>oopsconsultancy<font color="#990000">.</font>xmltask<font color="#990000">.</font>XPathAnalyser<font color="#990000">;</font>
<font color="#000080">import</font> com<font color="#990000">.</font>oopsconsultancy<font color="#990000">.</font>xmltask<font color="#990000">.</font>XPathAnalyserClient<font color="#990000">;</font>
<font color="#000080">import</font> com<font color="#990000">.</font>sun<font color="#990000">.</font>org<font color="#990000">.</font>apache<font color="#990000">.</font>xml<font color="#990000">.</font>internal<font color="#990000">.</font>utils<font color="#990000">.</font>PrefixResolver<font color="#990000">;</font>
<font color="#000080">import</font> com<font color="#990000">.</font>sun<font color="#990000">.</font>org<font color="#990000">.</font>apache<font color="#990000">.</font>xml<font color="#990000">.</font>internal<font color="#990000">.</font>utils<font color="#990000">.</font>PrefixResolverDefault<font color="#990000">;</font>
<font color="#000080">import</font> com<font color="#990000">.</font>sun<font color="#990000">.</font>org<font color="#990000">.</font>apache<font color="#990000">.</font>xpath<font color="#990000">.</font>internal<font color="#990000">.</font>XPathAPI<font color="#990000">;</font>
<font color="#000080">import</font> com<font color="#990000">.</font>sun<font color="#990000">.</font>org<font color="#990000">.</font>apache<font color="#990000">.</font>xpath<font color="#990000">.</font>internal<font color="#990000">.</font>objects<font color="#990000">.</font>XBoolean<font color="#990000">;</font>
<font color="#000080">import</font> com<font color="#990000">.</font>sun<font color="#990000">.</font>org<font color="#990000">.</font>apache<font color="#990000">.</font>xpath<font color="#990000">.</font>internal<font color="#990000">.</font>objects<font color="#990000">.</font>XNodeSet<font color="#990000">;</font>
<font color="#000080">import</font> com<font color="#990000">.</font>sun<font color="#990000">.</font>org<font color="#990000">.</font>apache<font color="#990000">.</font>xpath<font color="#990000">.</font>internal<font color="#990000">.</font>objects<font color="#990000">.</font>XNumber<font color="#990000">;</font>
<font color="#000080">import</font> com<font color="#990000">.</font>sun<font color="#990000">.</font>org<font color="#990000">.</font>apache<font color="#990000">.</font>xpath<font color="#990000">.</font>internal<font color="#990000">.</font>objects<font color="#990000">.</font>XObject<font color="#990000">;</font>
<font color="#000080">import</font> com<font color="#990000">.</font>sun<font color="#990000">.</font>org<font color="#990000">.</font>apache<font color="#990000">.</font>xpath<font color="#990000">.</font>internal<font color="#990000">.</font>objects<font color="#990000">.</font>XString<font color="#990000">;</font>

<font color="#9A1900">/**</font>
<font color="#9A1900"> * uses the JDK 1.5 XPath API to analyse XML docs</font>
<font color="#9A1900"> * </font>
<font color="#9A1900"> * </font><font color="#009900">@author</font><font color="#9A1900"> </font><font color="#0000FF"><a</font> <font color="#009900">href</font><font color="#990000">=</font><font color="#FF0000">"</font><font color="#FF0000">mailto:brian@oopsconsultancy.com</font><font color="#FF0000">"</font><font color="#0000FF">></font><font color="#9A1900">Brian Agnew</font><font color="#0000FF"></a></font>
<font color="#9A1900"> * </font><font color="#009900">@version</font><font color="#9A1900"> $Id: XPathAnalyser15.java,v 1.2 2004/05/18 08:42:17 bagnew Exp $</font>
<font color="#9A1900"> </font><font color="#9A1900">*/</font>
<font color="#0000FF">public</font> <font color="#0000FF">class</font> XPathAnalyser15 <font color="#0000FF">implements</font> XPathAnalyser <font color="#FF0000">{</font>

	<font color="#0000FF">private</font> XPathAnalyserClient client<font color="#990000">;</font>

	<font color="#0000FF">private</font> Object callback<font color="#990000">;</font>

	<font color="#0000FF">public</font> <font color="#009900">void</font> <font color="#000000">registerClient</font><font color="#990000">(</font>XPathAnalyserClient client<font color="#990000">,</font> Object callback<font color="#990000">)</font> <font color="#FF0000">{</font>
		<font color="#0000FF">this</font><font color="#990000">.</font>client <font color="#990000">=</font> client<font color="#990000">;</font>
		<font color="#0000FF">this</font><font color="#990000">.</font>callback <font color="#990000">=</font> callback<font color="#990000">;</font>
	<font color="#FF0000">}</font>

	<font color="#0000FF">public</font> <font color="#009900">int</font> <font color="#000000">analyse</font><font color="#990000">(</font>Node node<font color="#990000">,</font> String xpath<font color="#990000">)</font> <font color="#0000FF">throws</font> Exception <font color="#FF0000">{</font>
		<font color="#009900">int</font> count <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">;</font>
		
		Document document <font color="#990000">=</font> <font color="#0000FF">null</font><font color="#990000">;</font>
		<font color="#0000FF">if</font><font color="#990000">(</font>node <font color="#0000FF">instanceof</font> Document<font color="#990000">)</font> <font color="#FF0000">{</font>
			document <font color="#990000">=</font> <font color="#990000">(</font>Document<font color="#990000">)</font> node<font color="#990000">;</font>
		<font color="#FF0000">}</font> <font color="#0000FF">else</font> <font color="#FF0000">{</font>
			document <font color="#990000">=</font> node<font color="#990000">.</font><font color="#000000">getOwnerDocument</font><font color="#990000">(</font><font color="#990000">)</font><font color="#990000">;</font>
		<font color="#FF0000">}</font>
		
		PrefixResolver resolver <font color="#990000">=</font> <font color="#0000FF">new</font> <font color="#000000">PrefixResolverDefault</font><font color="#990000">(</font>document<font color="#990000">.</font><font color="#000000">getDocumentElement</font><font color="#990000">(</font><font color="#990000">)</font><font color="#990000">)</font><font color="#990000">;</font>
		
		XObject result <font color="#990000">=</font> XPathAPI<font color="#990000">.</font><font color="#000000">eval</font><font color="#990000">(</font>node<font color="#990000">,</font> xpath<font color="#990000">,</font> resolver<font color="#990000">)</font><font color="#990000">;</font>
		<font color="#0000FF">if</font> <font color="#990000">(</font>result <font color="#0000FF">instanceof</font> XNodeSet<font color="#990000">)</font> <font color="#FF0000">{</font>
			NodeIterator nl <font color="#990000">=</font> result<font color="#990000">.</font><font color="#000000">nodeset</font><font color="#990000">(</font><font color="#990000">)</font><font color="#990000">;</font>
			Node n<font color="#990000">;</font>
			<font color="#0000FF">while</font> <font color="#990000">(</font><font color="#990000">(</font>n <font color="#990000">=</font> nl<font color="#990000">.</font><font color="#000000">nextNode</font><font color="#990000">(</font><font color="#990000">)</font><font color="#990000">)</font> <font color="#990000">!</font><font color="#990000">=</font> <font color="#0000FF">null</font><font color="#990000">)</font> <font color="#FF0000">{</font>
				client<font color="#990000">.</font><font color="#000000">applyNode</font><font color="#990000">(</font>n<font color="#990000">,</font> callback<font color="#990000">)</font><font color="#990000">;</font>
				count<font color="#990000">+</font><font color="#990000">+</font><font color="#990000">;</font>
			<font color="#FF0000">}</font>
		<font color="#FF0000">}</font> <font color="#0000FF">else</font> <font color="#0000FF">if</font> <font color="#990000">(</font>result <font color="#0000FF">instanceof</font> XBoolean <font color="#990000">|</font><font color="#990000">|</font> result <font color="#0000FF">instanceof</font> XNumber
				<font color="#990000">|</font><font color="#990000">|</font> result <font color="#0000FF">instanceof</font> XString<font color="#990000">)</font> <font color="#FF0000">{</font>
			String str <font color="#990000">=</font> result<font color="#990000">.</font><font color="#000000">str</font><font color="#990000">(</font><font color="#990000">)</font><font color="#990000">;</font>
			client<font color="#990000">.</font><font color="#000000">applyNode</font><font color="#990000">(</font>str<font color="#990000">,</font> callback<font color="#990000">)</font><font color="#990000">;</font>
			count<font color="#990000">+</font><font color="#990000">+</font><font color="#990000">;</font>
		<font color="#FF0000">}</font>
		<font color="#0000FF">return</font> count<font color="#990000">;</font>
	<font color="#FF0000">}</font>
<font color="#FF0000">}</font>

then renew the xmltask-v1.15.1.jar.

for your input above, the xpath will look like "/:ejb-jar/:display-name/text()"




 Feed java.net RSS Feeds