我有以下XML:
<prescriptions>
<prescription id="1" amka="1">
<status>closed</status>
<doctor_info>
<amka>111111</amka>
<doc_code> 123</doc_code>
<name> chris</name>
<surname>st</surname>
<specialization>path</specialization>
<hospital>401</hospital>
</doctor_info>
<patient_info>
<amka>1</amka>
<genre>man</genre>
<name>elton </name>
<surname>kev</surname>
<age>28</age>
<adress>aaa123</adress>
<home_phone>210</home_phone>
<cell_phone>69</cell_phone>
<email>aaa@aaa.com</email>
<insurance>diom</insurance>
</patient_info>
<main_prescription>
<type>eee</type>
<epanalipseis>2</epanalipseis>
<date>21/1/2012</date>
<comms>blablabla</comms>
<diagnosh>kkkk</diagnosh>
<drug1>
<onoma>prezza</onoma>
<drastikh_ousia>llll</drastikh_ousia>
<posotita>12</posotita>
<dosologia>
<arithmos_hapion>5</arithmos_hapion>
<ores>2</ores>
<hmeres>21</hmeres>
</dosologia>
<simetoxi>25%</simetoxi>
<tropos_xorigisis>ass</tropos_xorigisis>
<cost>100</cost>
</drug1>
<drug2>
<onoma>prezza</onoma>
<drastikh_ousia>llll</drastikh_ousia>
<posotita>12</posotita>
<dosologia>
<arithmos_hapion>5</arithmos_hapion>
<ores>2</ores>
<hmeres>21</hmeres>
</dosologia>
<simetoxi>25%</simetoxi>
<tropos_xorigisis>ass</tropos_xorigisis>
<cost>100</cost>
</drug2>
<drug3>
<onoma>prezza</onoma>
<drastikh_ousia>llll</drastikh_ousia>
<posotita>12</posotita>
<dosologia>
<arithmos_hapion>5</arithmos_hapion>
<ores>2</ores>
<hmeres>21</hmeres>
</dosologia>
<simetoxi>25%</simetoxi>
<tropos_xorigisis>ass</tropos_xorigisis>
<cost>100</cost>
</drug3>
<total_cost>100</total_cost>
<prospou>nosokomeio</prospou>
<drug_comms>ablablabla</drug_comms>
</main_prescription>
</prescription>
</prescriptions>
在<main_prescription>
个节点中,我有三个药物节点:<drug1> , <drug2>
和<drug3>
。
有没有办法使用XQuery计算名称<drug...>
的节点数?
我正在使用下面的XQuery,但这是错误的:
select prescriptions.query('count(/prescriptions/prescription/main_prescription/drug[*])') as one1 from prescription
答案 0 :(得分:2)
即使使用XPath 1.0表达式:
,也可以选择所需的节点/*/*/main_prescription
/*[starts-with(name(), 'drug')
and
substring-after(name(), 'drug')
=
floor(substring-after(name(), 'drug'))
]
这会选择:
的所有元素 main_prescription
元素的子元素是文档顶部元素的子元素,并且:
名称以字符串"drug"
开头,"drug"
之后的剩余字符串是整数。
<强>解释强>:
正确使用函数starts-with()
,name()
和substring-after()
。
当floor($x) = $x
的字符串值表示整数时,使用表达式true()
精确计算为$x
的事实。
答案 1 :(得分:0)
试试这个。
'count(/ prescriptions / prescription / main_prescription / * [matches(name(),''^ drug [0-9] + $'')])
这里我们选择节点名称为“drug”且以整数结尾的所有节点。
您可以在以下链接上探索有关xpath函数的更多信息。 http://www.w3schools.com/Xpath/xpath_functions.asp