我正在尝试选择“站”项,如果它有超过4个子元素“Bett”且属性“Belegt”设置为“false”。子元素应该计算在内。
./Krankenhaus/Station[count(//Bett[@Belegt='true'])>4]
这导致返回所有电台。哪个不正确
这是我正在使用的XML。
<Krankenhaus>
<Station S_ID="1" Leitung="3">
<Name>Notaufnahme</Name>
<Standort>vorort</Standort>
<Telefonnummer>+43 732 93353555582</Telefonnummer>
<Leitbild>Schnellstmögliche Versorgung</Leitbild>
</Station>
<Station S_ID="2" Leitung="4">
<Name>Rehabilitation</Name>
<Standort>extern</Standort>
<Telefonnummer>+43 732 933522246739954</Telefonnummer>
<Besuchszeit>täglich 9.00-11.00 und 15.00-17.00</Besuchszeit>
<Leitbild>
Bestmögliche Rahmenbedingungen zur vollständigen Rehabilitation
</Leitbild>
<Beschreibung>Genesungsfreudliche Umgebung</Beschreibung>
<Patientenzimmer>
<Zimmer Z_ID="20105">
<Stockwerk>1</Stockwerk>
<Kategorie>A</Kategorie>
<Klasse>2</Klasse>
<MaxBetten>4</MaxBetten>
<Betten>
<Bett B_ID="201" Belegt="true"/>
<Bett B_ID="202" Belegt="false"/>
<Bett B_ID="203" Belegt="true"/>
<Bett B_ID="204" Belegt="false"/>
</Betten>
</Zimmer>
<Zimmer Z_ID="20106">
<Stockwerk>1</Stockwerk>
<Kategorie>C</Kategorie>
<Klasse>2</Klasse>
<MaxBetten>5</MaxBetten>
<Betten>
<Bett B_ID="205" Belegt="true"/>
<Bett B_ID="206" Belegt="true"/>
<Bett B_ID="207" Belegt="true"/>
</Betten>
</Zimmer>
<Zimmer Z_ID="20107">
<Stockwerk>1</Stockwerk>
<Kategorie>C</Kategorie>
<Klasse>2</Klasse>
<MaxBetten>5</MaxBetten>
<Ausstattung>Balkon</Ausstattung>
<Betten>
<Bett B_ID="2010" Belegt="true"/>
<Bett B_ID="2011" Belegt="true"/>
<Bett B_ID="2012" Belegt="true"/>
<Bett B_ID="2013" Belegt="false"/>
</Betten>
</Zimmer>
</Patientenzimmer>
</Station>
</Krankenhaus>
答案 0 :(得分:1)
路径起点处的斜杠始终表示隐式根查询。翻译成英语,您的查询转换为类似( Krankenhaus 表示医院, Station 具有相同含义, Bett 是一张床, > belegt 意味着被占用):
如果至少有四张病床(在所有医院),请选择所有医院的病房。
相反,在当前上下文.
开始搜索,可以明确地完成:
./Krankenhaus/Station[count(./Patientenzimmer/Zimmer/Betten/Bett[@Belegt='true'])>4]
或隐式(请参阅引入子路径的缺失./
):
./Krankenhaus/Station[count(Patientenzimmer/Zimmer/Betten/Bett[@Belegt='true'])>4]
当然,您也可以使用我在上面的示例中替换的descendant-or-self
轴//
来解释隐式上下文。如果你想坚持切割短路到床的路径,做
./Krankenhaus/Station[count(.//Bett[@Belegt='true'])>4]
最后,当您在根节点开始搜索时,我会在查询开头删除前导上下文节点.
。通过不把它放在那里(技术上完全没问题,因为默认上下文是根节点),你可以更简洁地了解你真正想做的事情:
/Krankenhaus/Station[count(.//Bett[@Belegt='true'])>4]