Bonjour,

J'ai un fichier xml :
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="versettexte" targetNamespace="http://tempuri.org/versettexte.xsd" elementFormDefault="qualified"
	xmlns="http://tempuri.org/versettexte.xsd" xmlns:mstns="http://tempuri.org/versettexte.xsd"
	xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="Texte" abstract="true">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Titre" type="xs:string" maxOccurs="1" minOccurs="1" />
				<xs:element ref="Corps" maxOccurs="1" minOccurs="1" />
				<xs:element name="Date" type="xs:string" maxOccurs="1" minOccurs="1" />
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="RString" abstract="false">
		<xs:sequence>
			<xs:element name="br" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>
	<xs:element name="Corps" abstract="false">
		<xs:complexType>
			<xs:sequence>
				<xs:sequence>
					<xs:element name="strophe" type="RString" minOccurs="0" maxOccurs="unbounded" />
					<xs:element name="p" type="RString" minOccurs="0" maxOccurs="unbounded" />
				</xs:sequence>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>


Je veux selctionner les noeud element de la racine dont la propriété abstract est à true.

xs:schema/xs:element[boolean(@abstract)=true()]


Cette expression Xpath me retourne l'ensemble des noeuds elements. Je ne comprends pas comment faire Smiley bawling .

Merci d'avance,
IlSandor.
Modifié par ilsandor (06 May 2005 - 15:01)
Oui boolean(quelque chose)=true dès que "quelque chose" est "non vide".
tu devrais essayer :
[@abstract='true']
J'apporte un élément de réponse moi même :
xs:schema/xs:element[@abstract='true']
fait ce que je veux.
Toutefois d'après ce que j'ai lu sur la DTD des schémas et leur spécifications, abstract est un booléen et peux donc prendre 0, 1, true et false comme valeur. Il serait dommage d'inculure une restriction à ce niveau de mon programme ou encore de compliquer la syntaxe de mon expression Xpath par un opérateur OR.
Donc ma question reste ouverte.
Merci,
IlSandor.

Edit:

Xavier a écrit :
Oui boolean(quelque chose)=true dès que "quelque chose" est "non vide".
tu devrais essayer :
[@abstract='true']
Nos posts se sont croisés Smiley cligne . Merci, en attendant mieux je vais faire ainsi mais mon problème reste entier.
Modifié par ilsandor (06 May 2005 - 01:04)
a écrit :
la DTD des schémas et leur spécifications, abstract est un booléen ...
mais mon problème reste entier
Au contraire tu as résolu toi même le problème (sans le savoir peut être ?).

Si @abstract est un booléen il ne faut surtout pas l'encapsuler dans la fonction boolean() pour réaliser le test mais au contraire :
1/ lui affecter des valeurs booléennes dans le XML
2/ faire un test portant sur des valeurs booléennes, par exemple :
[@abstract=true()]