gpt4 book ai didi

function - 使用 XQuery 扁平化 XML

转载 作者:行者123 更新时间:2023-12-03 00:31:29 32 4
gpt4 key购买 nike

我试图将 XML 层次结构展平为文本节点,其中输出标记名称是每个文本节点路径上的连字符连接标记。我对 http://www.chilkatsoft.com/xml-samples/bookstore.xml 提供的示例 XML 感到很有趣。作为输入。

到目前为止我已经创建了这个 XQuery:

declare function local:flatten($prefix as xs:string*, $nodes as node()*) as node()*
{
for $node in $nodes
return
typeswitch($node)
case element() return
local:flatten(insert-before($prefix, 1, $node/name()), $node/node())
case text() return
element {string-join(fn:reverse($prefix), '-')} {string($node)}
default return
'oops'
};

for $b in //bookstore/book return
local:flatten((), $b)

这大部分有效,但输出如下:

<?xml version="1.0" encoding="UTF-8"?>
<book>
</book>
<book-title>The Iliad and The Odyssey</book-title>
<book>
</book>
<book-price>12.95</book-price>
<book>
</book>
<book-comments>
</book-comments>
<book-comments-userComment> Best translation I've read. </book-comments-userComment>
<book-comments>
</book-comments>
<book-comments-userComment> I like other versions better. </book-comments-userComment>
<book-comments>
</book-comments>
<book>
</book>
...

我不关心此时是否缺少根元素(一次一步),但我不希望在正确呈现的文本节点之间出现虚假的空父标签。我究竟做错了什么?我对 XQuery 很陌生,可能犯了一个愚蠢的错误。

最佳答案

您的 XQuery 处理器正在处理元素之间的边界空白,如 <book><title>作为文本节点。要在查询中丢弃这些内容,您需要修改类型开关中的元素大小写,如下所示:

case text() return
if (normalize-space($node) eq "") then
()
else
element {string-join(fn:reverse($prefix), '-')} {string($node)}

关于function - 使用 XQuery 扁平化 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51861388/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com