Selectif计数条件
Select if count condition
我正在尝试 select 一个 "station" 项目,如果它有超过 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>
上下文节点
路径开头的斜杠始终表示隐式根查询。翻译成英语,您的查询会翻译成类似(Krankenhaus 表示医院,Station 具有相同的含义,Bett是一张床,belegt表示被占用):
Select all hospital's stations if there are at least four occupied beds (in all hospitals).
相反,在当前上下文 .
开始搜索,这可以明确地完成:
./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]
我正在尝试 select 一个 "station" 项目,如果它有超过 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>
上下文节点
路径开头的斜杠始终表示隐式根查询。翻译成英语,您的查询会翻译成类似(Krankenhaus 表示医院,Station 具有相同的含义,Bett是一张床,belegt表示被占用):
Select all hospital's stations if there are at least four occupied beds (in all hospitals).
相反,在当前上下文 .
开始搜索,这可以明确地完成:
./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]