xQuery XML 标记字符串
xQuery XML tokenize a string
我是 xQuery 的新手,似乎无法使用以下命令:
<measInfo measInfoId="1542455297">
<measTypes>1542455297 1542455298 1542455299 1542455300 1542455301 1542455302 1542455303 1542455304 1542455305 1542455306 1542455307 1542460296 1542460297 </measTypes>
<measValue measObjLdn="LTHAB0113422/ETHPORT:Cabinet No.=0, Subrack No.=1, Slot No.=7, Port No.=0, Subboard Type=BASE_BOARD">
<measResults>116967973 585560 496041572 682500 0 12583680 72080 520454 46670568 73432 2205837 1000000 1000000 </measResults>
</measValue>
<measValue measObjLdn="LTHAB0113422/ETHPORT:Cabinet No.=0, Subrack No.=1, Slot No.=7, Port No.=1, Subboard Type=BASE_BOARD">
<measResults>0 0 0 0 0 0 0 0 0 0 0 0 0 </measResults>
</measValue>
</measInfo>
我正在使用 //measInfo/measTypes/fn:tokenize(text(),'\s+')。我希望 return 每个 space 分隔值的记录,但是它 return 与 //measInfo/measTypes/text()
相同
我做错了什么?
在 XQuery 3.0(由 BaseX 实现)中,这实际上 有效:
declare context item := document {
<measInfo measInfoId="1542455297">
<measTypes>1542455297 1542455298 1542455299 1542455300 1542455301 1542455302 1542455303 1542455304 1542455305 1542455306 1542455307 1542460296 1542460297 </measTypes>
<measValue measObjLdn="LTHAB0113422/ETHPORT:Cabinet No.=0, Subrack No.=1, Slot No.=7, Port No.=0, Subboard Type=BASE_BOARD">
<measResults>116967973 585560 496041572 682500 0 12583680 72080 520454 46670568 73432 2205837 1000000 1000000 </measResults>
</measValue>
<measValue measObjLdn="LTHAB0113422/ETHPORT:Cabinet No.=0, Subrack No.=1, Slot No.=7, Port No.=1, Subboard Type=BASE_BOARD">
<measResults>0 0 0 0 0 0 0 0 0 0 0 0 0 </measResults>
</measValue>
</measInfo>
};
for $item in //measInfo/measTypes/fn:tokenize(text(),'\s+')
return <item>{$item}</item>
...returns...
<item>1542455297</item>
<item>1542455298</item>
<item>1542455299</item>
<item>1542455300</item>
<item>1542455301</item>
<item>1542455302</item>
<item>1542455303</item>
<item>1542455304</item>
<item>1542455305</item>
<item>1542455306</item>
<item>1542455307</item>
<item>1542460296</item>
<item>1542460297</item>
<item/>
在每个结果周围放置 <item>
可确保这些结果的呈现使每个项目在视觉上截然不同 - 否则,您可以将每个结果呈现为一行文本,并且不会很明显reader 它们是否被 fn:tokenize()
分成多个项目。
另一种方法是注入文字换行符:
for $item in //measInfo/measTypes/fn:tokenize(text(),'\s+')
return ($item, " ")
我是 xQuery 的新手,似乎无法使用以下命令:
<measInfo measInfoId="1542455297">
<measTypes>1542455297 1542455298 1542455299 1542455300 1542455301 1542455302 1542455303 1542455304 1542455305 1542455306 1542455307 1542460296 1542460297 </measTypes>
<measValue measObjLdn="LTHAB0113422/ETHPORT:Cabinet No.=0, Subrack No.=1, Slot No.=7, Port No.=0, Subboard Type=BASE_BOARD">
<measResults>116967973 585560 496041572 682500 0 12583680 72080 520454 46670568 73432 2205837 1000000 1000000 </measResults>
</measValue>
<measValue measObjLdn="LTHAB0113422/ETHPORT:Cabinet No.=0, Subrack No.=1, Slot No.=7, Port No.=1, Subboard Type=BASE_BOARD">
<measResults>0 0 0 0 0 0 0 0 0 0 0 0 0 </measResults>
</measValue>
</measInfo>
我正在使用 //measInfo/measTypes/fn:tokenize(text(),'\s+')。我希望 return 每个 space 分隔值的记录,但是它 return 与 //measInfo/measTypes/text()
相同我做错了什么?
在 XQuery 3.0(由 BaseX 实现)中,这实际上 有效:
declare context item := document {
<measInfo measInfoId="1542455297">
<measTypes>1542455297 1542455298 1542455299 1542455300 1542455301 1542455302 1542455303 1542455304 1542455305 1542455306 1542455307 1542460296 1542460297 </measTypes>
<measValue measObjLdn="LTHAB0113422/ETHPORT:Cabinet No.=0, Subrack No.=1, Slot No.=7, Port No.=0, Subboard Type=BASE_BOARD">
<measResults>116967973 585560 496041572 682500 0 12583680 72080 520454 46670568 73432 2205837 1000000 1000000 </measResults>
</measValue>
<measValue measObjLdn="LTHAB0113422/ETHPORT:Cabinet No.=0, Subrack No.=1, Slot No.=7, Port No.=1, Subboard Type=BASE_BOARD">
<measResults>0 0 0 0 0 0 0 0 0 0 0 0 0 </measResults>
</measValue>
</measInfo>
};
for $item in //measInfo/measTypes/fn:tokenize(text(),'\s+')
return <item>{$item}</item>
...returns...
<item>1542455297</item>
<item>1542455298</item>
<item>1542455299</item>
<item>1542455300</item>
<item>1542455301</item>
<item>1542455302</item>
<item>1542455303</item>
<item>1542455304</item>
<item>1542455305</item>
<item>1542455306</item>
<item>1542455307</item>
<item>1542460296</item>
<item>1542460297</item>
<item/>
在每个结果周围放置 <item>
可确保这些结果的呈现使每个项目在视觉上截然不同 - 否则,您可以将每个结果呈现为一行文本,并且不会很明显reader 它们是否被 fn:tokenize()
分成多个项目。
另一种方法是注入文字换行符:
for $item in //measInfo/measTypes/fn:tokenize(text(),'\s+')
return ($item, " ")