2016-07-25 83 views
2

我是新来的XQuery和似乎无法得到以下工作:XQuery的XML标记化的字符串

<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:标记化(文字() , '\ S +')。我希望会返回每个空格分隔值的记录,但它返回相同的// measInfo/measTypes/text()

我在做什么错了?

+0

嗯?当我运行它时,它会为每个空格分隔的值返回一个记录(在BaseX中)。 –

+0

我正在使用http://www.xpathtester.com/xquery来测试代码,您使用的是哪个网站? – user1854326

+0

不是一个网站,(可下载的,可安装的)XQuery数据库(具有非常好的GUI):http://basex.org/。 BaseX在开发过程中保持与XQuery标准的领先优势相当接近,因此非常适合当前版本的语言测试平台。 –

回答

1

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

... ...回报

<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>围绕每个结果确保这些结果的渲染使得每个项目在视觉上不同 - 否则,您可以将每个结果渲染为单行文本,并且它可以对于读者来说,他们是否被fn:tokenize()划分为多个项目并不明显。


另一种方式做,这是注入文字换行:

for $item in //measInfo/measTypes/fn:tokenize(text(),'\s+') 
return ($item, "&#10;") 
+0

雅虎,这很有效,你这么多 – user1854326