Mam dokument XML zawierający następującyXQuery: Zwracana wartość elementu raczej samego elementu
...
<foo>abc</foo>
...
Gdybym ocenić
return $xml//foo
wrócę
<foo>abc</foo>
Czy jest jakiś sposób, aby uzyskać tylko abc
zamiast?
Mam dokument XML zawierający następującyXQuery: Zwracana wartość elementu raczej samego elementu
...
<foo>abc</foo>
...
Gdybym ocenić
return $xml//foo
wrócę
<foo>abc</foo>
Czy jest jakiś sposób, aby uzyskać tylko abc
zamiast?
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()
Użyj funkcji ciąg aby uzyskać zawartość ciąg węzła.
return string($xml)
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. –
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
Aby powrócić tylko dane wewnątrz elementu można użyć:
return data($xml)
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
rzutować na xs: ciąg {xs:string($xml/foo)}
OSB (autobus usługa Oracle) użytkownicy mogą korzystać z następujących funkcji.
fn-bea:serialize($xml)
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