2009-07-20 9 views

Odpowiedz

23

Tak, chcesz funkcji text() do wybierania tekstu dziecko:

return $xml/text() 

być ostrożnym, jeśli będzie mieć zagnieżdżone struktury tag wewnątrz $ xml chociaż, ponieważ będzie to tylko przejść jeden poziom głęboko tekstu węzły. Jeśli chcesz cały tekst węzłów razem, pozbawiając się inne struktury XML, będzie to robić dowolnie głęboko:

return $xml//text() 
+4

Tekst() nie jest funkcją. Jest to test węzła. Zanim przejdziesz do tekstu(), zobacz post Evan Lenz ["text() to zapach kodu"] (http://developer.marklogic.com/blog/text-is-a-code-smell), a także Post Dave'a Cassela, który połączyłem poniżej, po odpowiedzi Olivera i odpowiedzi Pavela. – joewiz

15

Użyj funkcji ciąg aby uzyskać zawartość ciąg węzła.

return string($xml) 
+2

Jest to w rzeczywistości bardziej idiomatyczna i lepsza alternatywa niż preferowana powyżej odpowiedź. Będzie również poprawnie obsługiwał zagnieżdżanie węzłów potomnych. –

+3

Rzeczywiście. Zobacz wyjaśnienie Davida Cassela [różnice między tekstem(), fn: string() i fn: data()] (http://blog.davidcassel.net/2011/06/text-fnstring-and-fndata/) - wszystkie trzy z nich pojawiły się dotychczas w trzech odpowiedziach. – joewiz

8

Aby powrócić tylko dane wewnątrz elementu można użyć:

return data($xml) 
+1

Dokładniej, fn: data() jest funkcją, która daje rozproszoną wartość sekwencji węzłów, tj. Wartość wpisaną każdego węzła; podczas gdy fn: string() podaje wartość ciągu węzła. Zobacz linki, które posypałem przez powyższe komentarze, aby uzyskać więcej informacji na temat różnic między tekstem(), fn: string() i fn: data(). – joewiz

0

OSB (autobus usługa Oracle) użytkownicy mogą korzystać z następujących funkcji.

fn-bea:serialize($xml)