Html XML:如何在Xquery中递归组合相同元素的文本
如何使用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> &
<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表达式
- 你的样品格式不好