Solved

Run an XPath against an XSLT document

Posted on 2006-10-25
4
386 Views
Last Modified: 2013-11-23
Why is xpath assert broken when I use it on XSLT stylesheets? I have an XSLT stylesheet that I'm unit testing. My stylesheet generates XSLT stylesheets. I am trying to perform xpath asserts on the resulting generated stylesheets and it looks like XMLUnit is of no help to me. I use a valid Xpath that should result in a single hit and I get zero hits with the XMLUnit Xpath assert. So then I changed to use my own implementation of an XpathAssert. In my implementation I delegate to the JDK5 XPath API to check if an xpath exists. That throws errors. Can somebody show me how to execute this XPath, "/xsl:stylesheet/xsl:template[@name = 'foo']/xsl:call-template[@name = 'foo']" against the following XSLT?
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="foo">
<xsl:call-template name="foo"/>
</xsl:template>
</xsl:stylesheet>

I realize this is a particularly involved and unique question but I can't find an answer. I've also cross posted on the yahoo Junit group where I've included more detail about my actual code. I forgot that it takes a moment to moderate so now I'm posting here. Any insight is highly appreciated.
0
Comment
Question by:DizzyDiz
4 Comments
 
LVL 5

Expert Comment

by:kannan_ekanath
ID: 17819115
I am not sure if you can evaluate the complete XPath with attribute filters. I did use XPathAPI a while ago, so you mite find that there might be updates on the code. Here is a sample code,

String xslt = //your xslt string ..../stream
DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
dfactory.setValidating(false);
Document d = dfactory.newDocumentBuilder().parse(input);
..you got the org.w3c.dom.Document now...

XPathAPI.selectSingleNode(d, "/stylesheet/template/call-template")

The above will give you the node from there you can say node.getAttribute() and do an assert.

1) The last i used this API it does not support namespaces ("stylesheet" and not "xsl:stylesheet") and also i am not sure if it does any attribute matching... (you can try though)

2) The above is using org.apache.xpath.XPathAPI however i suggest you to try Dom4J also once. I think xpath matching is slightly better there
0
 
LVL 5

Author Comment

by:DizzyDiz
ID: 17819720
Thanks Kannan,

I found a workaround to my problem thanks to a third party API and it's sole author. (Juxy/Pavel Sher) There's two issues with my example I believe. The first issue involves allowing the XPath engine to select based on Namespaces. The second issue (which may have led to my errors, though I'm not sure) is setting the DOM to be namespace aware. That second issues was pointed out to me by Pavel. I also had another issue in code that I did not post involving multiple prefixes pointing to the same namespace. It turns out that that's not a particularly good idea when working with XPath. I fixed that issue and used my work around and now all is well. I actually believe that setting the Document to be namespace aware was causing the majority of my problems. I don't have time to double back and test for this. However if anyone else wishes to comment I'd appreciate the additional insight.

Cliff
0
 
LVL 1

Accepted Solution

by:
Computer101 earned 0 total points
ID: 18023939
PAQed with points refunded (500)

Computer101
EE Admin
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
mapAB Challlenge 35 128
simple java question 3 44
how to add new optional parameter to JSP 1 29
type mismatch (Object[] to double[] 4 13
For customizing the look of your lightweight component and making it look lucid like it was made of glass. Or: how to make your component more Apple-ish ;) This tip assumes your component to be of rectangular shape and completely opaque. (COD…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now