请考虑以下XML--
<table class="rel_patent"><tbody>
<tr><td>Name</td><td>Description</td></tr>
<tr><td>A</td><td>Type-A</td></tr>
<tr><td>B</td><td>Type-B</td></tr>
<tr><td>C</td><td>Type-C</td></tr>
<tr><td>AC</td><td>Type-C
Type-A</td></tr>
<tr><td>D</td><td></td></tr>
</tbody></table>现在我想用corresp选择并显示"Name“的所有值。当描述元素具有空值即具有name=D的元素时,值为" Description“element...even,并且,当描述元素具有由enter分隔的值时,我希望这些值(属于描述)位于不同的行中-即具有name=AC的元素的类型-C和类型-A
这是我写的查询类型--
let $rows_data:= $doc//table[@class="rel_patent"]/tbody/tr[1]/following-sibling::tr
for $data_single_row in $rows_data
return
let $cited_name:= $data_single_row/td[1]
let $original_types_w_return:= $data_single_row/td[4]
let $original_types_list:= tokenize($original_types_w_return, '(\r?\n|\r)$')
for $cited_type_each at $pos2 in $original_types_list
return concat( $cited_name, '^', $original_type_each, '^', $pos2)但是,我得到了以下类型的响应--
A^Type-A^1
B^Type-B^1
C^Type-C^1
AC^Type-C
Type-A^1现在,我需要在上面的代码+响应中得到以下正确的结果
(1) "AC“的数据应该是两个单独的行,其中"Type-C”和"Type-A“以及相应的数据都在这两行中的每一行。每行最后一个字段的值为1和2(因为这是2个值)
(2)根本没有显示"D“的数据。
我如何纠正上面的代码以符合这两个要求?
发布于 2012-10-15 23:16:41
这是可行的:
for $data_single_row in $rows_data
return
let $cited_name:= $data_single_row/td[1]
let $original_types_w_return:= $data_single_row/td[2]
let $original_types_list:= tokenize(concat($original_types_w_return, " "), '(\r?\n|\r)')
for $cited_type_each at $pos2 in $original_types_list
return concat( $cited_name, '^', normalize-space($cited_type_each), '^', $pos2)(第一个更改是用$cited_type_each替换$original_type_each,用2替换4 )。
第一个问题可以通过删除tokenize参数末尾的$来解决,因为在默认模式下,$只匹配字符串的末尾。
第二个问题是通过添加一个空格$original_types_w_return来解决的,这样它就不是空的,tokenize会返回一些东西,然后用XQuery - space删除它(在for3.0中,可能可以通过在for表达式中使用'allowing empty‘来解决这个问题)
https://stackoverflow.com/questions/12897876
复制相似问题