I've tried to reproduce your question using my own sample, which is below.
XML document:
bars.xml
<?xml version="1.0" encoding="UTF-8"?>
<bars>
<bar foo="x"/>
<bar/>
</bars>
XSD 1.0 document:
bars.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bars">
<xs:complexType>
<xs:sequence>
<xs:element name="bar" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="foo" type="xs:string"
default="def-val"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSLT 2.0 (schema aware) document:
bars.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:import-schema schema-location="bars.xsd" />
<xsl:template match="bars">
<values>
<xsl:for-each select="bar/@foo">
<att><xsl:value-of select="."/></att>
</xsl:for-each>
</values>
</xsl:template>
</xsl:stylesheet>
When I do an XSLT transformation of bars.xml with bars.xsl, I get the
following output:
<?xml version="1.0" encoding="UTF-8"?>
<values>
<att>x</att>
<att>def-val</att>
</values>
The idea I've illustrated is, getting a default value of an attribute from
an XSD Schema document (which is accessible from an XSLT stylesheet in a
schema aware transformation scenario).
I'm using Saxon-EE embedded in oXygen XML Developer.
with best regards,
Mukul gandhi
On 11 November 2016 at 16:00, Michael Müller-Hillebrand
mmh(_at_)docufy(_dot_)de <
xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
Hi experts,
We ran into an error that made me think about the idea of mixed data types
in sequences. Take this instance:
<?xml version="1.0" encoding="UTF-8"?>
<bars>
<bar foo="x"/>
<bar/>
</bars>
We need to process all <bar> and want to have a default value if @foo is
not present. When trying this XPath:
for $i in //bar/(@foo, 'no-foo')[1] return $i
we get the error "XPath failed due to: Cannot mix nodes and atomic values
in the result of a path expression"
When building the XPath the following way it runs fine and creates a
sequence of an attribute and a string:
for $b in //bar return for $i in $b/(@foo, 'no-foo')[1] return $i
What is the difference? Did I miss something in the specification?
Thanks,
- Michael
(Tested with Saxon 9.2/Kernow, 9.6/OxygenXML)
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--