如何获取XML根元素及其属性,但不包括内容

3

XML:

  <Parent id='1' name='Parent_1'>
    <Children name='Children'>
      <child name='Child_2' id='2'>child2_Parent_1</child>
      <child name='Child_4' id='4'>child4_Parent_1</child>
      <child name='Child_1' id='3'>child1_Parent_1</child>
      <child name='Child_3' id='1'>child3_Parent_1</child>
    </Children>
  </Parent>

预期输出:

 <Parent id='1' name='Parent_1'>

你好,我提供了一些示例XML文件。我尝试使用X Query获取结果,但是我找不到正确的方法。请问能否帮我解决这个问题?

谢谢!

1个回答

3

我会使用计算元素构造器来实现这个功能,该构造器的内容仅重新填充属性。

let $root := (: the document, copy-pasted below :)
  <Parent id='1' name='Parent_1'>
    <Children name='Children'>
      <child name='Child_2' id='2'>child2_Parent_1</child>
      <child name='Child_4' id='4'>child4_Parent_1</child>
      <child name='Child_1' id='3'>child1_Parent_1</child>
      <child name='Child_3' id='1'>child3_Parent_1</child>
    </Children>
  </Parent>
return element { node-name($root) } { $root/@* }

此元素还可以插入其他内容,如下所示:

let $root := (: the document, copy-pasted below :)
  <Parent id='1' name='Parent_1'>
    <Children name='Children'>
      <child name='Child_2' id='2'>child2_Parent_1</child>
      <child name='Child_4' id='4'>child4_Parent_1</child>
      <child name='Child_1' id='3'>child1_Parent_1</child>
      <child name='Child_3' id='1'>child3_Parent_1</child>
    </Children>
  </Parent>
return element { node-name($root) } {
  $root/@*,
  <foo/>,
  <bar/>
}

谢谢Ghislain..但我收到了以下错误信息:“无法使用()作为元素名称”。 - Antony
问题已解决..再次感谢 - Antony
你好,如何获取类似于 "</Parent>" 的结束标记,请帮忙处理。 - Antony
嗨,安东尼。如果没有内容,则<Parent id='1' name='Parent_1'/>(末尾带斜杠)等同于<Parent id='1' name='Parent_1'></Parent>。XQuery会确保在将新元素序列化回XML时正确关闭标记。 - Ghislain Fourny
嗨,我需要没有关闭标签(/)。我的期望是<Parent id='1' name='Parent_1'>,因为我已经添加了一些内容并最终关闭了</Parent>标签。 - Antony
建议使用生成格式良好的 XML 工具(如 XQuery、XSLT、MarkLogic 等)来操作 XML。XQuery 还可以通过嵌套查询(如编辑后答案中所示)来添加内容到标签中并关闭它。否则,在数据流中生成的文档可能不符合格式要求,也可能无法正确被消费。当然,也可以将 XML 文档视为纯文本,并使用正则表达式等其他语言来删除斜杆并附加关闭标签,但这非常危险并超出了 XQuery 的范畴。 - Ghislain Fourny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接