Robert Papp created XALANJ-2602:
-----------------------------------
Summary: Selected attribute is not iterated correctly
Key: XALANJ-2602
URL: https://issues.apache.org/jira/browse/XALANJ-2602
Project: XalanJ2
Issue Type: Bug
Security Level: No security risk; visible to anyone (Ordinary problems in
Xalan projects. Anybody can view the issue.)
Components: transformation, XPath, XSLTC
Affects Versions: 2.7.2, 2.7.1
Environment: Android 5 and Windows 10 x64
Reporter: Robert Papp
Assignee: Steven J. Hathaway
{code:title=items.xml}
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<?xml-stylesheet type="text/xsl" href="items.xslt"?>
<root>
<item name="Item 1">
<item name="Item 2">
<item name="Item 3">
<item name="Item 4" />
</item>
</item>
</item>
</root>
{code}
The context where the problem occurs is "Item 4"'s element node.
{code:title=items.xslt}
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="utf-8" />
<xsl:template match="//item[@name='Item 4']">
<p>ancestor::item<ul>
<xsl:for-each select="ancestor::item">
<li>
<xsl:value-of select="position()" />
/
<xsl:value-of select="last()" />
:
<xsl:value-of select="@name" />
</li>
</xsl:for-each>
</ul></p>
<p>ancestor::item/@name<ul>
<xsl:for-each select="ancestor::item/@name">
<li>
<xsl:value-of select="position()" />
/
<xsl:value-of select="last()" />
:
<xsl:value-of select="." />
</li>
</xsl:for-each>
</ul></p>
</xsl:template>
</xsl:stylesheet>
{code}
If the parents of the context node are selected, everything is ok, but if the
{{@name}}s of each parent is selected, then the iteration stops abruptly
without error.
{code:title=Expected output (sans HTML)}
ancestor::item
1 / 3 : Item 1
2 / 3 : Item 2
3 / 3 : Item 3
ancestor::item/@name
1 / 3 : Item 1
2 / 3 : Item 2
3 / 3 : Item 3
{code}
{code:title=Actual output (sans HTML)}
ancestor::item
1 / 3 : Item 1
2 / 3 : Item 2
3 / 3 : Item 3
ancestor::item/@name
1 / 3 : Item 1
{code}
I tried Java 5 and 8 built-in processor, Chrome 52 and Internet Explorer 11;
they all agree that the second iterations should result in 3 items. Originally
I found the issue while running a similar XPath query foreach in Android 5.0 on
a Galaxy S5, which uses Xalan 2.7.1; on my Windows 10 machine I ran the
processing with Xalan 2.7.2 on the classpath:
{code}
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
public class Solution {
public static void main(String[] args) throws IOException,
TransformerException {
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new
StreamSource(new FileInputStream("items.xslt")));
StringWriter capture = new StringWriter();
transformer.transform(new StreamSource(new
FileInputStream("items.xml")), new StreamResult(capture));
System.out.println(capture.toString());
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]