我试图按名称仅显示节点的下方元素。
在Xpath中,这是我的声明://akweny[parent::akwen/nazwa="Atlantycki"]
这是我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<akweny>
<akwen>
<nazwa>Atlantycki</nazwa>
<typ>ocean</typ>
<powierzchnia>106450</powierzchnia>
<akweny>
<akwen>
<nazwa>Północne</nazwa>
<typ>morze</typ>
<powierzchnia>750</powierzchnia>
</akwen>
<akwen>
<nazwa>Batyckie</nazwa>
<typ>morze</typ>
<powierzchnia>386</powierzchnia>
<akweny>
<akwen>
<nazwa>Botnicka</nazwa>
<typ>zatoka</typ>
<powierzchnia>117</powierzchnia>
</akwen>
</akweny>
</akwen>
</akweny>
</akwen>
<akwen>
<nazwa>Spokojny</nazwa>
<typ>ocean</typ>
<powierzchnia>179700</powierzchnia>
</akwen>
</akweny>
这是我的DTD
<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT akweny (akwen+)>
<!ELEMENT akwen (nazwa, typ, powierzchnia, akweny?)>
<!ELEMENT nazwa (#PCDATA)>
<!ELEMENT typ (#PCDATA)>
<!ELEMENT powierzchnia (#PCDATA)>
这是我的Xquery声明
declare function app:PokazRodzica($node as node(), $model as map(*), $name as xs
:string?) {
<table border="1" width="100%">
<th>Podrzędne</th><th>Nazwa</th><th>Typ</th><th>Powierzchnia</th><th>Edycja</th>
{
(:DOBRE ZAPYTANIE
for $x in doc('/db/Dane/akweny.xml/')//akweny[parent::akwen/nazwa="Atlantycki"]
parent::akwen/nazwa="Atlantycki"]/text()
:)
for $x in doc('/db/Dane/akweny.xml/')//akweny[parent::akwen/nazwa="Atlantycki"]
let $nazwa := $x/nazwa
let $typ := $x/typ
let $powierzchnia := $x/powierzchnia
return
<tr>
<th><img src="/exist/apps/Obrazki/lupa.jpg" alt="Podrzedny" /> {count($nazwa/text())} KLIK</th>
<th bgcolor="#F46978">{$nazwa}</th>
<th>{$typ}</th>
<th>{$powierzchnia}</th>
<th>Edytuj</th>
</tr>
}
</table>
};
要使用我的xml快速测试Xpath,您可以使用此工具:http://www.online-toolz.com/tools/xpath-editor.php
最大的问题是Exist-DB数据显示不正确。
我的结果不是......但它应该是节点父母......
我不知道我做错了什么。请帮帮我。
答案 0 :(得分:2)
在开始使用eXist-db的模板系统之前,您应该在eXide中测试XPath。
您使用/db/Dane/akweny.xml/
来引用该文档。虽然这没有错误,但您应该删除最后一个“/”,因为它不是文档名称的一部分。
然后你应该看看你的XPath,//akweny[parent::akwen/nazwa="Atlantycki"]
。您是否尝试找到任何akweny
个父akwen
,其中nazwa
孩子的值为“Atlantycki”?只有一个,
<akweny>
<akwen>
<nazwa>Północne</nazwa>
<typ>morze</typ>
<powierzchnia>750</powierzchnia>
</akwen>
<akwen>
<nazwa>Batyckie</nazwa>
<typ>morze</typ>
<powierzchnia>386</powierzchnia>
<akweny>
<akwen>
<nazwa>Botnicka</nazwa>
<typ>zatoka</typ>
<powierzchnia>117</powierzchnia>
</akwen>
</akweny>
</akwen>
</akweny>
或者您是否想要检索其他内容?
尝试输入
doc('/db/Dane/akweny.xml')//akweny[parent::akwen/child::nazwa eq "Atlantycki"]
也许你正在寻找这样的东西:
<table border="1" width="100%">
<th>Podrzędne</th><th>Nazwa</th><th>Typ</th><th>Powierzchnia</th><th>Edycja</th>
{
let $nodes := doc('/db/Dane/akweny.xml/')//akweny[parent::akwen/nazwa="Atlantycki"]
for $x in $nodes/*
let $nazwa := $x/nazwa/text()
let $typ := $x/typ/text()
let $powierzchnia := $x/powierzchnia/text()
return
<tr>
<th><img src="/exist/apps/Obrazki/lupa.jpg" alt="Podrzedny" /> {count($nazwa/text())} KLIK</th>
<th bgcolor="#F46978">{$nazwa}</th>
<th>{$typ}</th>
<th>{$powierzchnia}</th>
<th>Edytuj</th>
</tr>
}</table>
完成此操作后,请记住您必须在某处调用您的应用程序:PokazRodzica()函数,例如在index.html中。该函数本身不显示任何内容(如上所述)。
请将标题中的拼写更正为“使用带XQuery的XPath在eXist-db中显示错误”。