Html XML:如何在Xquery中递归组合相同元素的文本

Html XML:如何在Xquery中递归组合相同元素的文本,html,xml,xslt,xpath,xquery,Html,Xml,Xslt,Xpath,Xquery,如何使用Xquery合并整个文档中相同和重复元素中的所有上下文 样本文件: <webMessage xmlns="http://www.website.gov.uk/CM/envelope"> <EnvelopeVersion>2.0</EnvelopeVersion> <Header> <MessageDetails> <Class>Web-CT600</Class> &

如何使用Xquery合并整个文档中相同和重复元素中的所有上下文

样本文件:

<webMessage xmlns="http://www.website.gov.uk/CM/envelope">
<EnvelopeVersion>2.0</EnvelopeVersion>
<Header>
    <MessageDetails>
        <Class>Web-CT600</Class>
        <Qualifier/>
        <Function/>
    </MessageDetails>
    <SenderDetails>
        <IDAuthentication>
            <SenderID/>
            <Authentication>
                <Method/>
                <Role/>
                <Value/>
            </Authentication>
        </IDAuthentication>
    </SenderDetails>
</Header>
<webTalkDetails>
    <Keys>
        <Key Type="UTR">2274792909</Key>
    </Keys>
    <ChannelRouting>
        <Channel>
            <URI/>
            <Product/>
            <Version/>
        </Channel>
    </ChannelRouting>
</webTalkDetails>
<Body>
    <IRenvelope xmlns="http://www.website.gov.uk/taxation/CT/3">
        <IRheader>
            <Keys>
                <Key Type="UTR">2274792909</Key>
            </Keys>
            <PeriodEnd/>
            <DefaultCurrency/>
            <IRmark Type="generic">n1uS2MiavBsb6YwL82MK</IRmark>
            <Sender/>
        </IRheader>
        <CompanyReturn ReturnType="new">
            <CompanyInformation>
                <CompanyName/>
                <RegistrationNumber/>
                <Reference/>
                <PeriodCovered>
                    <From>2013-01-07</From>
                    <To>2014-01-07</To>
                </PeriodCovered>
            </CompanyInformation>
            <Turnover>
                <Total>45893</Total>
            </Turnover>
            <CompanyCalculation>
                <Income>
                    <TradingAndProfessional>
                        <Profits>95517</Profits>
                        <NetProfits>51276</NetProfits>
                    </TradingAndProfessional>
                </Income>
            </CompanyCalculation>
            <AttachedFiles>
                <Xsubmission>
                    <Accounts>
                        <Instance>
                            <EncodedInlineSubmission> TEXT I WANT TO JOIN</EncodedInlineSubmission>
                        </Instance>
                    </Accounts>
                    <Computations>
                        <Instance>
                            <EncodedInlineSubmission> MORE TEXT I WANT TO JOIN</EncodedInlineSubmission>
                        </Instance>
                    </Computations>
                </Xsubmission>

            </AttachedFiles>
        </CompanyTaxReturn>
    </IRenvelope>
</Body>

2
Web-CT600
2274792909
2274792909
n1uS2MiavBsb6YwL82MK
2013-01-07
2014-01-07
45893
95517
51276
我想加入的文本
更多我想加入的文本

因此,在这里的XML中,我希望将的所有实例中的所有文本组合在一起,并将它们放在一个元素中,即单个元素中,这样它将读取:

<EncodedInlineSubmission> TEXT I WANT TO JOIN MORE TEXT I WANT TO JOIN</EncodedInlineSubmission>
TEXT我想加入更多我想加入的文本

您可以使用所有元素的串联值和元素的前一个名称简单地构造新元素:

for $x in //*:Xsubmission
let $encoded := $x//*:EncodedInlineSubmission
return element {$encoded[1]/local-name()} {string-join($encoded)}

更新:在返回的字符串周围添加元素构造函数

您可以使用
fn:string-join()
将字符串序列与连接字符串连接起来。您需要计算一个XPath表达式,该表达式选择要加入的所有节点,然后检索它们的字符串值

下面是一个例子:

declare namespace env = "http://www.website.gov.uk/CM/envelope";

let $nodes := $doc/env:webMessage/env:Body//env:EncodedInlineSubmission
return element EncodedInlineSubmission { fn:string-join($nodes/fn:string(), " ") }
注:

  • 假设
    $doc
    已绑定到示例文档的文档节点
  • 您可能需要一个不同的XPath表达式
  • 你的样品格式不好

问题描述过于笼统。到目前为止你试过什么?嗨,我试过了,但我觉得我举的例子有点太宽泛了。下面是一个包含虚拟数据的数据结构示例。我尝试了你的代码,但没有得到任何结果。你知道上面更新的部分吗?我更新了我的答案。但是,下次请在提问之前慢慢来,并提供有用的SSCCE。更新后的问题与原始问题没有什么关系。但这将只返回连接的文本,而不是元素。