Использование XQuery для поиска узла с конкретными деталями

Я не эксперт в XQuery, и мне нужно искать в большой коллекции файлов, XML-документ имеет такую ​​структуру,

<files>
<file>
    <name>1</name>
    <contents>
        <content>games</content>
        <content>movies</content>
    </contents>
</file>
<file>
    <name>2</name>
    <contents>
        <content>games</content>
        <content>picture</content>
        <content>work</content>
    </contents>
</file>

its like the user i have a set of content like may be ("games","movies") and I have to return the name

пока я написал только это

for $x in /files/file
    return $x/content

Я хочу знать, возможно ли это с XQuery? если возможно, просто дайте мне несколько рекомендаций, я не знаю всех конструкций xquery, это мой главный недостаток


person Community    schedule 23.03.2013    source источник
comment
Вы не разъяснили, что вы вводите: это один XML-документ с множеством элементов с именем file или много файлов, каждый из которых содержит XML-документ? И вы не прояснили, какой результат вы хотите получить. Вы хотите имя каждого файла? В этом случае это просто /files/file/name.   -  person Michael Kay    schedule 24.03.2013
comment
это один файл XML, содержащий все теги 'file' в тегах 'files'   -  person    schedule 24.03.2013
comment
Не могли бы вы проиллюстрировать то, что вы хотите, в качестве результата? Будет ли это текст, XML, HTML или что-то еще? Когда вы говорите, что я должен вернуть имя, вы имеете в виду, что для каждого файла вы хотите создать список имен (то есть содержимое элемента содержимого)? Если да, то представлен ли этот список в виде, скажем, списка, разделенного запятыми, или как? И нужно ли связывать идентификаторы файлов с именами? Вам будет полезен образец того, что вы ищете.   -  person Jollymorphic    schedule 25.03.2013


Ответы (2)


вы также должны указать элемент contents в xpath, поскольку он содержит значения элемента content. вы можете попробовать это, если хотите только значения content

for $x in /files/file/contents/content
return xs:string($x)

вы также можете попробовать это

for $x in /files/file/contents/content
return $x/text()
person Sofia    schedule 11.04.2013

Вы можете попробовать это:

let $data:=
<files>
<file>
    <name>1</name>
    <contents>
        <content>games</content>
        <content>movies</content>
    </contents>
</file>
<file>
    <name>2</name>
    <contents>
        <content>games</content>
        <content>picture</content>
        <content>work</content>
    </contents>
</file>
</files>

for $cont in $data//content
return element contents{$cont}
person Akbar aLI    schedule 13.06.2018