2010-10-08 8 views
0

Je dispose d'un fichier xmlfichier xml Parsing en utilisant XPath et XQuery

<category> 
    <type name="SWEATERS"> 
     <product id =1> 
      <itemNumber>1</itemNumber> 
      <name>ProductA2</name> 
      <price>345</price> 
     </product> 
     <product id=2> 
      <itemNumber>4</itemNumber> 
      <name>Product Test </name> 
      <price>456</price> 
     </product> 
    </type> 
</category> 

je XQuery

$xml->xpath('//category/type/product[@id=1]'); 

Quand j'utilisé ce iam XQuery obtenir que le nom et price.How je peux obtenir le nom de type 'SWEATERS' ainsi que le nom et le prix

Répondre

1

Quand j'utilisé ce iam XQuery se que le nom et price.How je peux obtenir le nom du type « MAILLE » avec nom et le prix

Le XPath 1.0 expression doit être:

//category/type/product[itemNumber=1]/*[self::name or self::price]| 
//category/type[product[itemNumber=1]] 

Ou plus staticly:

//category/type/product[itemNumber=1]/*[self::name or self::price]| 
//category/type[@name='SWEATERS'] 
1

Si vous voulez sélectionner l'élément type, vous devez changer votre expression pour:

//category/type[product/itemNumber=1]

Ou juste le nom:

//category/type[product/itemNumber=1]/@name

+0

Il fonctionne bien.Mais il donne toutes les valeurs avec les numéros d'article 1 et 2 – Warrior

0

Je crains que vous ne pouvez pas le faire avec une seule requête avec XPath, mais vous pouvez le faire avec DOMNode->parentNode.

0

vous pouvez essayer quelque chose comme:

$xml->xpath('//category/type[product/itemNumber=1]/(@name | product[itemNumber=1]/(name | price))'); 

cette option sélectionne un attribut et deux éléments. Le | est un opérateur syndical