2013-04-20 16 views
6

Nuovo per XPath. Stavo provando a utilizzare l'attività XML in SSIS per caricare alcuni valori. Utilizzando l'inventario XML di Microsoft menzionato di seguito.Come utilizzare più condizioni in Xpath?

Come posso caricare il valore del primo nome in libreria/libri dove lo stile è nuovo e premio = 'Pulitzer'? //book[@style='novel' and ./author/award/text()='Pulitzer'] è quello che sto cercando. Dà l'intero elemento. Dove dovrei modificare per ottenere solo il valore del nome?

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="myfile.xsl" ?> 
<bookstore specialty="novel"> 
    <book style="autobiography"> 
    <author> 
     <first-name>Joe</first-name> 
     <last-name>Bob</last-name> 
     <award>Trenton Literary Review Honorable Mention</award> 
    </author> 
    <price>12</price> 
    </book> 
    <book style="textbook"> 
    <author> 
     <first-name>Mary</first-name> 
     <last-name>Bob</last-name> 
     <publication>Selected Short Stories of 
     <first-name>Mary</first-name> 
     <last-name>Bob</last-name> 
     </publication> 
    </author> 
    <editor> 
     <first-name>Britney</first-name> 
     <last-name>Bob</last-name> 
    </editor> 
    <price>55</price> 
    </book> 
    <magazine style="glossy" frequency="monthly"> 
    <price>2.50</price> 
    <subscription price="24" per="year"/> 
    </magazine> 
    <book style="novel" id="myfave"> 
    <author> 
     <first-name>Toni</first-name> 
     <last-name>Bob</last-name> 
     <degree from="Trenton U">B.A.</degree> 
     <degree from="Harvard">Ph.D.</degree> 
     <award>P</award> 
     <publication>Still in Trenton</publication> 
     <publication>Trenton Forever</publication> 
    </author> 
    <price intl="Canada" exchange="0.7">6.50</price> 
    <excerpt> 
     <p>It was a dark and stormy night.</p> 
     <p>But then all nights in Trenton seem dark and 
     stormy to someone who has gone through what 
     <emph>I</emph> have.</p> 
     <definition-list> 
     <term>Trenton</term> 
     <definition>misery</definition> 
     </definition-list> 
    </excerpt> 
    </book> 
    <my:book xmlns:my="uri:mynamespace" style="leather" price="29.50"> 
    <my:title>Who's Who in Trenton</my:title> 
    <my:author>Robert Bob</my:author> 
    </my:book> 
</bookstore> 

risposta

8

Ho una risposta.

//book[@style='novel' and ./author/award/text()='Pulitzer']//first-name 
+0

Questo è del tutto bene, non c'è nulla per migliorare. –

+1

Non userei 'text()' a meno che non mi occupi di contenuti misti (es. Un elemento 'p' XHTML contenente'

La rapida volpe saltata sul cane pigro

') e ho bisogno esplicitamente di selezionare un testo figlio o discendente (ad esempio '/ p/text() [1]' per selezionare il nodo di testo con 'il'). Altrimenti vorrei semplicemente confrontare l'elemento. Quindi nel tuo caso '// book [@style = 'novel' e author/award = 'Pulitzer'] // first-name' sono sufficienti, non si ottiene nulla con l 'uso di' author/award/text() '. –

+0

Grazie a voi Jens e Martin per condividere le vostre opinioni. – Akshay

5

Uso:

/*/book[@style='novel']/author[award = 'Pulitzer']/first-name 

Questo seleziona ogni elemento first-name cui author genitore ha un figlio award con valore stringa del 'Pulitzer' e il cui (del author) genitore è un book cui style l'attributo ha valore "romanzo" e il cui genitore è l'elemento principale del documento XML.

1

Una domanda simile nello stesso contesto. Come posso fare il vice-versa? Supponiamo di voler trovare l'id di tutti quei libri il cui prezzo è maggiore di 20? So di essere un toccasana, ma voglio davvero chiarire la mia comprensione.

Ecco la necessaria XPATH:

//book/price[text() > 20]/.. 
Problemi correlati