You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mu...@apache.org on 2025/05/17 11:52:20 UTC
(xalan-java) branch xalan-j_xslt3.0_mvn updated: fixing an xpath 3.1 expression evaluation bug
This is an automated email from the ASF dual-hosted git repository.
mukulg pushed a commit to branch xalan-j_xslt3.0_mvn
in repository https://gitbox.apache.org/repos/asf/xalan-java.git
The following commit(s) were added to refs/heads/xalan-j_xslt3.0_mvn by this push:
new 6ac4114af fixing an xpath 3.1 expression evaluation bug
6ac4114af is described below
commit 6ac4114af21b39d1e848ef13c2a2bb8e9e48c999
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Sat May 17 17:21:57 2025 +0530
fixing an xpath 3.1 expression evaluation bug
---
README | 6 +--
.../org/apache/xpath/compiler/XPathParser.java | 34 +++++++++++-----
.../xpath3/XPathSequenceConstructorTests.java | 14 ++++++-
.../gold/test1.out | 0
.../gold/test10.out | 0
.../gold/test11.out | 0
.../gold/test17.out | 0
.../gold/test18.out | 0
.../gold/test19.out | 0
.../gold/test2.out | 0
.../gold/test20.out | 0
.../gold/test21.out | 0
.../gold/test22.out | 0
.../xpath_sequence_constructor/gold/test23.out | 7 ++++
.../gold/test3.out | 0
.../gold/test4.out | 0
.../gold/test5.out | 0
.../gold/test6.out | 0
.../gold/test7.out | 0
.../gold/test8.out | 0
.../gold/test9.out | 0
.../test1.xsl | 0
.../test10.xsl | 0
.../test11.xsl | 0
.../test12.xsl | 0
.../test13.xsl | 0
.../test14.xsl | 0
.../test15.xsl | 0
.../test16.xsl | 0
.../test17.xsl | 0
.../test18.xsl | 0
.../test19.xsl | 0
.../test1_a.xml | 0
.../test1_b.xml | 0
.../test1_c.xml | 0
.../test1_d.xml | 0
.../test1_e.xml | 0
.../test1_f.xml | 0
.../test2.xsl | 0
.../test20.xsl | 0
.../test21.xsl | 0
.../test22.xsl | 0
.../test23.xsl} | 45 +++++++++-------------
.../test3.xsl | 0
.../test4.xsl | 0
.../test5.xsl | 0
.../test6.xsl | 0
.../test7.xsl | 0
.../test8.xsl | 0
.../test9.xsl | 0
50 files changed, 65 insertions(+), 41 deletions(-)
diff --git a/README b/README
index 281106415..59648d9aa 100644
--- a/README
+++ b/README
@@ -59,16 +59,16 @@ This produces Maven build output with trailing information like following:
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.apache.xalan.tests.main.AllXalanXSLT3Tests
-[INFO] Tests run: 1042, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 33.722 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
+[INFO] Tests run: 1043, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 30.617 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
[INFO]
[INFO] Results:
[INFO]
-[INFO] Tests run: 1042, Failures: 0, Errors: 0, Skipped: 0
+[INFO] Tests run: 1043, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 01:51 min
+[INFO] Total time: 01:37 min
To run Xalan-J's XSL 3 processor for invoking an XSL stylesheet transformation, the jar file xalan-java-3.0.1.jar and other
jar files available within 'libs' folder need to be made available on Java run-time's classpath.
diff --git a/src/main/java/org/apache/xpath/compiler/XPathParser.java b/src/main/java/org/apache/xpath/compiler/XPathParser.java
index 703d8b9b4..51ebdd663 100644
--- a/src/main/java/org/apache/xpath/compiler/XPathParser.java
+++ b/src/main/java/org/apache/xpath/compiler/XPathParser.java
@@ -1506,12 +1506,26 @@ public class XPathParser
break;
}
}
-
- // Verifying, whether sequence constructor expression, can create
- // a sequence of at-least two XDM values.
- if (isXPathParseOkToProceed && isSequenceConstructor) {
- if (!(seqOrArrayXPathItems.size() > 1)) {
- isXPathParseOkToProceed = false;
+
+ if (isXPathParseOkToProceed && isSequenceConstructor) {
+ if (seqOrArrayXPathItems.size() > 1) {
+ // An XPath literal sequence constructor expression can
+ // create an XDM sequence having at-least two values.
+ isXPathParseOkToProceed = true;
+ }
+ else {
+ String xpathExprStr = seqOrArrayXPathItems.get(0);
+ if (xpathExprStr.startsWith("for") || xpathExprStr.startsWith("let") ||
+ xpathExprStr.startsWith("some") ||
+ xpathExprStr.startsWith("every") ||
+ xpathExprStr.startsWith("if")) {
+ // XPath parse of expressions like (for ...). i.e, XPath 'for'
+ // and other such expressions contained within '(' & ')'.
+ isXPathParseOkToProceed = true;
+ }
+ else {
+ isXPathParseOkToProceed = false;
+ }
}
}
@@ -1536,10 +1550,10 @@ public class XPathParser
if (m_isSequenceOperand) {
m_isSequenceOperand = false;
}
- else {
- // Re-start XPath parse, reusing the same token queue
- m_queueMark = 0;
- nextToken();
+ else {
+ // Re-start XPath parse, reusing the same token queue
+ m_queueMark = 0;
+ nextToken();
ExprSingle();
}
}
diff --git a/src/test/java/org/apache/xalan/tests/xpath3/XPathSequenceConstructorTests.java b/src/test/java/org/apache/xalan/tests/xpath3/XPathSequenceConstructorTests.java
index 4ce1c5abf..95baa3d33 100644
--- a/src/test/java/org/apache/xalan/tests/xpath3/XPathSequenceConstructorTests.java
+++ b/src/test/java/org/apache/xalan/tests/xpath3/XPathSequenceConstructorTests.java
@@ -32,9 +32,9 @@ import org.junit.Test;
*/
public class XPathSequenceConstructorTests extends XslTransformTestsUtil {
- private static final String XSL_TRANSFORM_INPUT_DIRPATH = XSLTestConstants.XSL_TRANSFORM_INPUT_DIRPATH_PREFIX + "sequence_constructor/";
+ private static final String XSL_TRANSFORM_INPUT_DIRPATH = XSLTestConstants.XSL_TRANSFORM_INPUT_DIRPATH_PREFIX + "xpath_sequence_constructor/";
- private static final String XSL_TRANSFORM_GOLD_DIRPATH = XSLTestConstants.XSL_TRANSFORM_GOLD_DIRPATH_PREFIX + "sequence_constructor/gold/";
+ private static final String XSL_TRANSFORM_GOLD_DIRPATH = XSLTestConstants.XSL_TRANSFORM_GOLD_DIRPATH_PREFIX + "xpath_sequence_constructor/gold/";
@BeforeClass
public static void setUpBeforeClass() throws Exception {
@@ -267,5 +267,15 @@ public class XPathSequenceConstructorTests extends XslTransformTestsUtil {
runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
}
+
+ @Test
+ public void xslSequenceConstructorTest23() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test23.xsl";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test23.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test23.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
}
diff --git a/src/test/resources/sequence_constructor/gold/test1.out b/src/test/resources/xpath_sequence_constructor/gold/test1.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test1.out
rename to src/test/resources/xpath_sequence_constructor/gold/test1.out
diff --git a/src/test/resources/sequence_constructor/gold/test10.out b/src/test/resources/xpath_sequence_constructor/gold/test10.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test10.out
rename to src/test/resources/xpath_sequence_constructor/gold/test10.out
diff --git a/src/test/resources/sequence_constructor/gold/test11.out b/src/test/resources/xpath_sequence_constructor/gold/test11.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test11.out
rename to src/test/resources/xpath_sequence_constructor/gold/test11.out
diff --git a/src/test/resources/sequence_constructor/gold/test17.out b/src/test/resources/xpath_sequence_constructor/gold/test17.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test17.out
rename to src/test/resources/xpath_sequence_constructor/gold/test17.out
diff --git a/src/test/resources/sequence_constructor/gold/test18.out b/src/test/resources/xpath_sequence_constructor/gold/test18.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test18.out
rename to src/test/resources/xpath_sequence_constructor/gold/test18.out
diff --git a/src/test/resources/sequence_constructor/gold/test19.out b/src/test/resources/xpath_sequence_constructor/gold/test19.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test19.out
rename to src/test/resources/xpath_sequence_constructor/gold/test19.out
diff --git a/src/test/resources/sequence_constructor/gold/test2.out b/src/test/resources/xpath_sequence_constructor/gold/test2.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test2.out
rename to src/test/resources/xpath_sequence_constructor/gold/test2.out
diff --git a/src/test/resources/sequence_constructor/gold/test20.out b/src/test/resources/xpath_sequence_constructor/gold/test20.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test20.out
rename to src/test/resources/xpath_sequence_constructor/gold/test20.out
diff --git a/src/test/resources/sequence_constructor/gold/test21.out b/src/test/resources/xpath_sequence_constructor/gold/test21.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test21.out
rename to src/test/resources/xpath_sequence_constructor/gold/test21.out
diff --git a/src/test/resources/sequence_constructor/gold/test22.out b/src/test/resources/xpath_sequence_constructor/gold/test22.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test22.out
rename to src/test/resources/xpath_sequence_constructor/gold/test22.out
diff --git a/src/test/resources/xpath_sequence_constructor/gold/test23.out b/src/test/resources/xpath_sequence_constructor/gold/test23.out
new file mode 100644
index 000000000..f96cf9cef
--- /dev/null
+++ b/src/test/resources/xpath_sequence_constructor/gold/test23.out
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+ <one>1 2 3 4 5</one>
+ <two>4</two>
+ <three>false, true</three>
+ <four>false, true</four>
+ <five>abc, pqr</five>
+</result>
diff --git a/src/test/resources/sequence_constructor/gold/test3.out b/src/test/resources/xpath_sequence_constructor/gold/test3.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test3.out
rename to src/test/resources/xpath_sequence_constructor/gold/test3.out
diff --git a/src/test/resources/sequence_constructor/gold/test4.out b/src/test/resources/xpath_sequence_constructor/gold/test4.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test4.out
rename to src/test/resources/xpath_sequence_constructor/gold/test4.out
diff --git a/src/test/resources/sequence_constructor/gold/test5.out b/src/test/resources/xpath_sequence_constructor/gold/test5.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test5.out
rename to src/test/resources/xpath_sequence_constructor/gold/test5.out
diff --git a/src/test/resources/sequence_constructor/gold/test6.out b/src/test/resources/xpath_sequence_constructor/gold/test6.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test6.out
rename to src/test/resources/xpath_sequence_constructor/gold/test6.out
diff --git a/src/test/resources/sequence_constructor/gold/test7.out b/src/test/resources/xpath_sequence_constructor/gold/test7.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test7.out
rename to src/test/resources/xpath_sequence_constructor/gold/test7.out
diff --git a/src/test/resources/sequence_constructor/gold/test8.out b/src/test/resources/xpath_sequence_constructor/gold/test8.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test8.out
rename to src/test/resources/xpath_sequence_constructor/gold/test8.out
diff --git a/src/test/resources/sequence_constructor/gold/test9.out b/src/test/resources/xpath_sequence_constructor/gold/test9.out
similarity index 100%
rename from src/test/resources/sequence_constructor/gold/test9.out
rename to src/test/resources/xpath_sequence_constructor/gold/test9.out
diff --git a/src/test/resources/sequence_constructor/test1.xsl b/src/test/resources/xpath_sequence_constructor/test1.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test1.xsl
rename to src/test/resources/xpath_sequence_constructor/test1.xsl
diff --git a/src/test/resources/sequence_constructor/test10.xsl b/src/test/resources/xpath_sequence_constructor/test10.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test10.xsl
rename to src/test/resources/xpath_sequence_constructor/test10.xsl
diff --git a/src/test/resources/sequence_constructor/test11.xsl b/src/test/resources/xpath_sequence_constructor/test11.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test11.xsl
rename to src/test/resources/xpath_sequence_constructor/test11.xsl
diff --git a/src/test/resources/sequence_constructor/test12.xsl b/src/test/resources/xpath_sequence_constructor/test12.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test12.xsl
rename to src/test/resources/xpath_sequence_constructor/test12.xsl
diff --git a/src/test/resources/sequence_constructor/test13.xsl b/src/test/resources/xpath_sequence_constructor/test13.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test13.xsl
rename to src/test/resources/xpath_sequence_constructor/test13.xsl
diff --git a/src/test/resources/sequence_constructor/test14.xsl b/src/test/resources/xpath_sequence_constructor/test14.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test14.xsl
rename to src/test/resources/xpath_sequence_constructor/test14.xsl
diff --git a/src/test/resources/sequence_constructor/test15.xsl b/src/test/resources/xpath_sequence_constructor/test15.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test15.xsl
rename to src/test/resources/xpath_sequence_constructor/test15.xsl
diff --git a/src/test/resources/sequence_constructor/test16.xsl b/src/test/resources/xpath_sequence_constructor/test16.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test16.xsl
rename to src/test/resources/xpath_sequence_constructor/test16.xsl
diff --git a/src/test/resources/sequence_constructor/test17.xsl b/src/test/resources/xpath_sequence_constructor/test17.xsl
similarity index 100%
copy from src/test/resources/sequence_constructor/test17.xsl
copy to src/test/resources/xpath_sequence_constructor/test17.xsl
diff --git a/src/test/resources/sequence_constructor/test18.xsl b/src/test/resources/xpath_sequence_constructor/test18.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test18.xsl
rename to src/test/resources/xpath_sequence_constructor/test18.xsl
diff --git a/src/test/resources/sequence_constructor/test19.xsl b/src/test/resources/xpath_sequence_constructor/test19.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test19.xsl
rename to src/test/resources/xpath_sequence_constructor/test19.xsl
diff --git a/src/test/resources/sequence_constructor/test1_a.xml b/src/test/resources/xpath_sequence_constructor/test1_a.xml
similarity index 100%
rename from src/test/resources/sequence_constructor/test1_a.xml
rename to src/test/resources/xpath_sequence_constructor/test1_a.xml
diff --git a/src/test/resources/sequence_constructor/test1_b.xml b/src/test/resources/xpath_sequence_constructor/test1_b.xml
similarity index 100%
rename from src/test/resources/sequence_constructor/test1_b.xml
rename to src/test/resources/xpath_sequence_constructor/test1_b.xml
diff --git a/src/test/resources/sequence_constructor/test1_c.xml b/src/test/resources/xpath_sequence_constructor/test1_c.xml
similarity index 100%
rename from src/test/resources/sequence_constructor/test1_c.xml
rename to src/test/resources/xpath_sequence_constructor/test1_c.xml
diff --git a/src/test/resources/sequence_constructor/test1_d.xml b/src/test/resources/xpath_sequence_constructor/test1_d.xml
similarity index 100%
rename from src/test/resources/sequence_constructor/test1_d.xml
rename to src/test/resources/xpath_sequence_constructor/test1_d.xml
diff --git a/src/test/resources/sequence_constructor/test1_e.xml b/src/test/resources/xpath_sequence_constructor/test1_e.xml
similarity index 100%
rename from src/test/resources/sequence_constructor/test1_e.xml
rename to src/test/resources/xpath_sequence_constructor/test1_e.xml
diff --git a/src/test/resources/sequence_constructor/test1_f.xml b/src/test/resources/xpath_sequence_constructor/test1_f.xml
similarity index 100%
rename from src/test/resources/sequence_constructor/test1_f.xml
rename to src/test/resources/xpath_sequence_constructor/test1_f.xml
diff --git a/src/test/resources/sequence_constructor/test2.xsl b/src/test/resources/xpath_sequence_constructor/test2.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test2.xsl
rename to src/test/resources/xpath_sequence_constructor/test2.xsl
diff --git a/src/test/resources/sequence_constructor/test20.xsl b/src/test/resources/xpath_sequence_constructor/test20.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test20.xsl
rename to src/test/resources/xpath_sequence_constructor/test20.xsl
diff --git a/src/test/resources/sequence_constructor/test21.xsl b/src/test/resources/xpath_sequence_constructor/test21.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test21.xsl
rename to src/test/resources/xpath_sequence_constructor/test21.xsl
diff --git a/src/test/resources/sequence_constructor/test22.xsl b/src/test/resources/xpath_sequence_constructor/test22.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test22.xsl
rename to src/test/resources/xpath_sequence_constructor/test22.xsl
diff --git a/src/test/resources/sequence_constructor/test17.xsl b/src/test/resources/xpath_sequence_constructor/test23.xsl
similarity index 50%
rename from src/test/resources/sequence_constructor/test17.xsl
rename to src/test/resources/xpath_sequence_constructor/test23.xsl
index a9aca72ec..668be2fb4 100644
--- a/src/test/resources/sequence_constructor/test17.xsl
+++ b/src/test/resources/xpath_sequence_constructor/test23.xsl
@@ -1,32 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
- <!-- Author: mukulg@apache.org -->
-
- <!-- An XSLT stylesheet test case, where XPath 3.1 built-in function calls
- have literal sequence arguments.
-
- Few XPath expression examples within this test case, are borrowed from
- XPath 3.1 F&O spec.
- -->
-
- <xsl:output method="xml" indent="yes"/>
-
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- XSL stylesheet test case, to test XPath 'for' and other
+ such expressions contained within '(' & ')'. -->
+
+ <xsl:output method="xml" indent="yes"/>
+
<xsl:template match="/">
<result>
- <one>
- <xsl:value-of select="for-each((1,2,3), function($x) { $x * $x })"/>
- </one>
- <two>
- <xsl:value-of select="for-each(('John','Jane'), function($var) { string-to-codepoints($var) })"/>
- </two>
- <three>
- <xsl:value-of select="sum((1,2,3))"/>
- </three>
- <four>
- <xsl:value-of select="avg((1,2,3,4))"/>
- </four>
+ <one><xsl:value-of select="(for $x in 1 to 5 return $x)"/></one>
+ <two><xsl:value-of select="(let $x := 1 return $x + 3)"/></two>
+ <xsl:variable name="seq1" select="(false(), false())"/>
+ <xsl:variable name="seq2" select="(false(), true())"/>
+ <three><xsl:value-of select="(some $x in $seq1 satisfies ($x eq true()))"/>, <xsl:value-of select="(some $x in $seq2 satisfies ($x eq true()))"/></three>
+ <xsl:variable name="seq3" select="(false(), true())"/>
+ <xsl:variable name="seq4" select="(true(), true())"/>
+ <four><xsl:value-of select="(every $x in $seq3 satisfies ($x eq true()))"/>, <xsl:value-of select="(every $x in $seq4 satisfies ($x eq true()))"/></four>
+ <five><xsl:value-of select="(if (true()) then 'abc' else 'pqr')"/>, <xsl:value-of select="(if (false()) then 'abc' else 'pqr')"/></five>
</result>
</xsl:template>
@@ -46,6 +39,6 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- -->
+ -->
-</xsl:stylesheet>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/test/resources/sequence_constructor/test3.xsl b/src/test/resources/xpath_sequence_constructor/test3.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test3.xsl
rename to src/test/resources/xpath_sequence_constructor/test3.xsl
diff --git a/src/test/resources/sequence_constructor/test4.xsl b/src/test/resources/xpath_sequence_constructor/test4.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test4.xsl
rename to src/test/resources/xpath_sequence_constructor/test4.xsl
diff --git a/src/test/resources/sequence_constructor/test5.xsl b/src/test/resources/xpath_sequence_constructor/test5.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test5.xsl
rename to src/test/resources/xpath_sequence_constructor/test5.xsl
diff --git a/src/test/resources/sequence_constructor/test6.xsl b/src/test/resources/xpath_sequence_constructor/test6.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test6.xsl
rename to src/test/resources/xpath_sequence_constructor/test6.xsl
diff --git a/src/test/resources/sequence_constructor/test7.xsl b/src/test/resources/xpath_sequence_constructor/test7.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test7.xsl
rename to src/test/resources/xpath_sequence_constructor/test7.xsl
diff --git a/src/test/resources/sequence_constructor/test8.xsl b/src/test/resources/xpath_sequence_constructor/test8.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test8.xsl
rename to src/test/resources/xpath_sequence_constructor/test8.xsl
diff --git a/src/test/resources/sequence_constructor/test9.xsl b/src/test/resources/xpath_sequence_constructor/test9.xsl
similarity index 100%
rename from src/test/resources/sequence_constructor/test9.xsl
rename to src/test/resources/xpath_sequence_constructor/test9.xsl
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org