这是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)>
例如 XML(其有效 ofc)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE akweny SYSTEM "akweny.dtd">
<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>
当然这里是简单的 Xpath
let $nodes := doc('/db/Dane/akweny.xml')//akweny[ancestor::akwen/nazwa="Atlantycki"]
for $x in $nodes/*
let $nazwa := $x/nazwa/text()
..
return
但是如果我将 nazwa="Atlantycki"更改为 nazwa="Północne"则什么也没有显示。这是正确的吗?
最佳答案
“如果我将 nazwa="Atlantycki"更改为 nazwa="Północne",则不会显示任何内容。这是正确的吗?”。是的,这是预期的行为。
基本上,这个 XPath 查询:
//akweny[ancestor::akwen/nazwa="Atlantycki"]
将搜索 <akweny>
具有祖先的元素:
<akwen>
具有子元素的元素:
<nazwa>Atlantycki</nazwa>
所以如果你改变nazwa="Atlantycki"
至nazwa="Północne"
该查询不会返回任何内容。因为唯一<akwen>
满足查询的元素不是任何元素的父元素 <akweny>
元素:
<akwen>
<nazwa>Północne</nazwa>
<typ>morze</typ>
<powierzchnia>750</powierzchnia>
</akwen>
换句话说不 <akweny>
元素满足查询。
关于xml - 如何使用 XPath 显示所有节点子节点、子节点以及更深层的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22277748/