2013-04-20 18 views
6

Neu in Xpath. Versuchte, XML-Task in SSIS zu verwenden, um einige Werte zu laden. Verwenden des unten aufgeführten Microsoft-XML-InventarsWie verwendet man mehrere Bedingungen in Xpath?

Wie kann ich Vornamen in Buchläden/Bücher laden, wo Stil neuartig ist und award = 'Pulitzer'? //book[@style='novel' and ./author/award/text()='Pulitzer'] ist was ich versuche. Es gibt das ganze Element. Wo soll ich ändern, um nur den Vornamenwert zu erhalten?

<?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> 

Antwort

8

Ich bekam eine Antwort.

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

Das ist völlig in Ordnung, es nichts zu verbessern ist. –

+1

Ich würde 'text()' nicht verwenden, wenn ich mich mit gemischtem Inhalt befasse (zB ein XHTML 'p' Element mit'

Der schnelle Fuchs sprang über den faulen Hund.

') und ich muss explizit einen Text auswählen Kind oder Nachkomme (zB '/ p/text() [1]', um den Textknoten mit 'The' auszuwählen). Sonst würde ich einfach das Element vergleichen. Also in deinem Fall '// book [@style = 'roman' und author/award = 'Pulitzer'] // Vorname 'reicht aus, du gewinnst nichts mit' author/award/text() '. –

+0

Danke Jens und Martin für das Teilen Ihrer Ansichten. – Akshay

5

Verwenden:

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

Dies wählt jedes first-name Element, deren author Elternteil hat ein award Kind mit String-Wert von 'Pulitzer' und deren (dem author) Elternteil ist ein book deren style Das Attribut hat den Wert "neu" und das übergeordnete Element ist das oberste Element des XML-Dokuments.

1

Eine ähnliche Frage im selben Kontext. Wie kann ich das umgekehrt machen? Nehmen wir an, ich möchte die ID aller Bücher finden, deren Preis größer als 20 ist? Ich weiß, dass ich ein Stupser bin, aber ich möchte wirklich mein Verständnis klären.

Hier ist die benötigte XPATH:

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