如何使用XPath显示所有节点子节点,子节点和更深层次

时间:2014-03-09 02:38:34

标签: xml xpath xquery exist-db

这是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”,那么一切都没有显示出来。这是对的吗?

1 个答案:

答案 0 :(得分:3)

如果我将nazwa =”Atlantycki“更改为nazwa =”Północne“它没有显示。这是正确的吗?”。是的,这是预期的行为。

基本上,这个XPath查询:

//akweny[ancestor::akwen/nazwa="Atlantycki"]

将搜索具有ancnestor的<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> 元素符合查询