如何通过XQuery获得所有元素及其属性的列表

如何通过XQuery获得所有元素及其属性的列表,xquery,Xquery,我对XQuery非常陌生,我正在尝试获取所有元素和所有属性的列表。 应该是这样的: 元素1@attributex,@attribue y。。。 元素2@attribute x,@attribute y。。。 元素3@attribute x,@attribute y 到目前为止,我正在尝试此操作,但出现错误“Item expected,sequence found”: 我觉得我正在把一个简单的步骤变成一个复杂的步骤。请帮忙 提前感谢,Eleonore提供了一系列属性节点,/*提供了一系列元素节点


我对XQuery非常陌生,我正在尝试获取所有元素和所有属性的列表。 应该是这样的:

元素1@attributex,@attribue y。。。
元素2@attribute x,@attribute y。。。
元素3@attribute x,@attribute y

到目前为止,我正在尝试此操作,但出现错误“Item expected,sequence found”:

我觉得我正在把一个简单的步骤变成一个复杂的步骤。请帮忙


提前感谢,Eleonore提供了一系列属性节点,
/*
提供了一系列元素节点。通常,要将类似于
local-name()
的函数应用于序列中的每个项,对于节点,您有三个选项:

  • 使用最后一个步骤
    /local-name()
    ,例如
    /@*/local-name()
    /*/local-name()
  • 在XQuery 3.1中,使用映射操作符
    例如
    /@*!local-name()
  • 为..使用
    。。返回
    表达式,例如,/@*返回本地名称($att)

  • /@*
    提供属性节点序列,
    /*
    提供元素节点序列。通常,要将类似于
    local-name()
    的函数应用于序列中的每个项,对于节点,您有三个选项:

  • 使用最后一个步骤
    /local-name()
    ,例如
    /@*/local-name()
    /*/local-name()
  • 在XQuery 3.1中,使用映射操作符
    例如
    /@*!local-name()
  • 为..使用
    。。返回
    表达式,例如,/@*返回本地名称($att)
  • local-name()函数将单个节点作为其参数,而不是节点序列。要对序列中的每个节点应用相同的函数,请使用“!”运算符:
    /*!local-name()

    函数的string-join()接受两个参数,一个字符串列表和一个分隔符。您正在尝试传递两个字符串列表。你想要

    字符串联接((//*!local-name(),//*!local-name()),','))

    当然,您可能还希望使用distinct-values()消除列表中的重复项,并将元素与属性名称区分开来,或者将属性名称与其显示的元素相关联。这是完全可能的。但是对于这一点,您必须问一个更精确的问题。

    local-name()函数将单个节点作为其参数,而不是节点序列。要对序列中的每个节点应用相同的函数,请使用“!”运算符:
    /*!local-name()

    函数的string-join()接受两个参数,一个字符串列表和一个分隔符。您正在尝试传递两个字符串列表。你想要

    字符串联接((//*!local-name(),//*!local-name()),','))


    当然,您可能还希望使用distinct-values()消除列表中的重复项,并将元素与属性名称区分开来,或者将属性名称与其显示的元素相关联。这是完全可能的。但对于这一点,你必须问一个更精确的问题。

    @michaelhkay谢谢你,这非常有帮助!实际上,我想区分元素和属性名,并将各自的元素和属性关联起来,以便创建一个列表。理想情况下,也参考我在原始问题中列出的列表,它应该是这样的:-element1[at]attribute x=“value”、[at]attribue y=“value”、…-元素2[at]属性x=“值”,[at]属性y=“值”。。。我是否应该添加一个新的问题和这些影响,或者一个评论就足够了?我来这里的时间不长。再次感谢!最好提出一个新问题,更准确地说明您想要什么样的输出。通常给出一个输入和相应的期望输出就足以使一般要求变得清晰。@michaelhkay谢谢,这非常有用!实际上,我想区分元素和属性名,并将各自的元素和属性关联起来,以便创建一个列表。理想情况下,也参考我在原始问题中列出的列表,它应该是这样的:-element1[at]attribute x=“value”、[at]attribue y=“value”、…-元素2[at]属性x=“值”,[at]属性y=“值”。。。我是否应该添加一个新的问题和这些影响,或者一个评论就足够了?我来这里的时间不长。再次感谢!最好提出一个新问题,更准确地说明您想要什么样的输出。通常给出一个输入和相应的期望输出就足以使一般需求变得清晰。
    for $x in collection("XYZ")
    let $att := local-name(//@*)
    let $ele := local-name(//*)
    let $eleatt := string-join($ele, $att)
    return $eleatt