Requête XPath avec la variable de plusieurs conditions

Long-temps à l'auditeur, pour la première fois de l'appelant. Je suis relativement nouveau à XPath et a regardé à plusieurs autres threads d'ici et d'ailleurs, mais je n'arrive pas à obtenir une requête de travail, toute aide serait super.

J'ai XML comme suit:

<catalog>
  <book pgid="28054" lang="en">
    <title>The Brothers Karamazov</title>
    <author>Dostoyevsky, Fyodor</author>
    <friendly_title>The Brothers Karamazov by Fyodor Dostoyevsky</friendly_title>
    <file>
      <type>ePub</type>
      <path>cache/generated/28054/</path>
      <name>pg28054.epub</name>
      <size>800</size>
    </file>
    <file>
      <type>PDF</type>
      <path>2/8/0/5/28054/</path>
      <name>28054-pdf.pdf</name>
      <size>5829</size>
    </file>
    <file>
      <type compression="zipped">PDF</type>
      <path>2/8/0/5/28054/</path>
      <name>28054-pdf.zip</name>
      <size>1693</size>
    </file>
    <file>
      <type encoding="utf-8" compression="zipped">Text</type>
      <path>2/8/0/5/28054/</path>
      <name>28054-0.zip</name>
      <size>726</size>
    </file>
  </book>
</catalog>

(catalogue est l'élément racine, et dans cet exemple il n'y a pas <contributor> éléments)

J'ai la requête de travail sur l'auteur, contributeur, le titre, la langue et les recherches, mais je me suis accroché sur l'ajout d'un fichier de type condition. Cette requête pour trouver des livres de l'auteur OU contributeur contenant "Dostoïevski", et au titre contenant "Frères" avec la langue "fr" est de travail (c'est à dire de donner les résultats attendus), mais si il ya une meilleure façon de l'écrire, je suis toutes les oreilles:

/catalog//book/*[(contains(self::author,'Dostoyevsky') or contains(self::contributor,'Dostoyevsky')) and contains(../title,'Brothers') and ../@lang = 'en']

Ce que je ne peut pas se rendre au travail est de limiter les résultats de la requête pour les fichiers d'un certain type, c'est à dire en ajoutant and ../file/type='PDF' ou quelque chose. N'ai pas de chance avec | syndicats, soit.

Merci d'avance.

Oh, et si il le faut, la requête doit être construit de manière dynamique (de la forme d'entrée), il se doit donc de conserver une syntaxe universelle qui fonctionne avec n'importe quel nombre d'utilisateur fourni par critères.

  • S'il vous plaît, faire vos devoirs et de prévoir au moins réels, bien formé et significative document XML.
  • Qu'est-ce que vous voulez, Dimitre? C'est mon vrai XML. Je ne pense pas que le contenu est pertinent.
  • Dimitre est droit, XML n'est pas bien formé. La façon dont vous écrivez votre attribut lang est pas le XML. Vous devez mettre à jour votre question pour la rendre valide (ex: lang="...").
  • Ok, désolé pour la confusion. Il n'y a plus de choses ici que ce qui est pertinent pour cette question en particulier, et j'essayais juste de présenter les modèle et donc opté pour une abréviation. Naturellement, le contenu est de lang='fr' (ou autre).
  • Même si vous résoudre le problème avec l'attribut, auriez-vous pris la peine de remplir les éléments avec le contenu? Ce que vous avez fournis ressemble plus à un "squelette" d'un véritable document XML.
InformationsquelleAutor swornabsent | 2011-12-20