2

xPathを使用すると、次のようなテキストが表示されます。

Sed id felis mi; Nam porta lacinia sapien vestibulum egestas; Praesent nec nisl purus、egetmollismetus。Fusce euismod ante id tellus tincidunt dignissim ornaremagnablandit。Nunc idrisusquam。

私はそれを2つの変数に分割したいと思います:

var1 =最初から最初のドットまでのテキスト=>この部分に10語以上(空白で区切られている)が含まれ、セミコロン';'が含まれている場合、最初から最初のセミコロンまでのテキストが使用されます。

var2=テキストの右側。

私はこのコードから始めましたが、それは私が望むものを私に与えません(私はまだ10語の条件を扱っていませんでした):

let $left := data(tokenize($doc//div/blockquote/p/text(), '^(.*?)[;|.](.*?)$')[1])
let $right := data(tokenize($doc//div/blockquote/p/text(), '^(.*?)[;|.](.*?)$')[2])

前もって感謝します。

4

2 に答える 2

4

tokenize()正規表現を使用せずに実行することもできます。

   for $s in 'Sed id felis mi; Nam porta lacinia sapien vestibulum egestas; Praesent nec nisl purus, eget mollis metus. Fusce euismod ante id tellus tincidunt dignissim ornare magna blandit. Nunc id risus quam.',
       $vBeforeDot in substring-before($s, '.'),
       $vBeforeSemiC in substring-before($s, ';')
      return
         ($vBeforeDot
                       [string-length(normalize-space(.))
                       - string-length(translate(normalize-space(.), ' ', ''))
                       le 9
                       ],
        $vBeforeSemiC
        )[1]
于 2012-07-26T13:33:01.120 に答える
3

これを試して

for $p in doc('file:///c:/test.xml')//div/blockquote/p/text()
    return 
        if (count(tokenize(tokenize($p,'[.]')[1],'\s+')) gt 10) then
            (tokenize($p,'[.]')[1])
        else
            (tokenize($p,';')[1])

参考までに、 fn:tokenizeを参照してください。

于 2012-07-26T12:38:52.117 に答える