我有两个XML文档,想要创建一个联合。 这两个文档的格式不同。
Doc1:
<contact>
<realName>Kurt Meier</realName>
<phone number="017289232"></phone>
</contact>
Doc2:
<Person>
<Name>Susie</Name>
<FirstName>Meier</FirstName>
<Phone>0173895734</Phone>
</Person>
所需输出应归一化。 如果是元素,则FULLNAME是realName, 而FULLNAME是在元素情况下与FirstName串联的Name。
<CONTACT>
<FULLNAME>Kurt Meier</FULLNAME>
<PHONE_NO>017289232<PHONE_NO>
</CONTACT>
<CONTACT>
<FULLNAME>Susie Meier</FULLNAME>
<PHONE_NO>0173895734<PHONE_NO>
</CONTACT>
在sql中,它看起来像:
select
realName as FULLNAME,
number as PHONE_NO
from Doc1
union all
select
FirstName ||' '|| Name as FULLNAME,
phone as PHONE_NO
from Doc2
我知道我可以使用逗号分隔的xpath创建一个联合:
for $e in (doc("Doc1.xml")//contact, doc("Doc2.xml")//Person)
return $e
但是我无法像SQL中的AS语句一样更改返回的元素名称。
答案 0 :(得分:2)
您需要构造新元素,对于XQuery 3,最紧凑的语法是
doc("Doc1.xml")//contact!<CONTACT><FULLNAME>{realName}</FULLNAME><PHONE_NO>{phone/@number}/</PHONE_NO></CONTACT>,
doc("Doc2.xml")//Person!<CONTACT><FULLNAME>{Name} {FirstName}</FULLNAME><PHONE_NO>{Phone}/</PHONE_NO></CONTACT>
答案 1 :(得分:1)
根据Martin Honnen的输入,解决方案是:
(
doc("Doc1")//contact
!<CONTACT>
<FULLNAME>{data(realName)}</FULLNAME>
<PHONE_NO>{data(phone/@number)}/</PHONE_NO>
</CONTACT>,
doc("Doc2")//Person
!<CONTACT>
<FULLNAME>{data(Name)} {' '} {data(FirstName)}</FULLNAME>
<PHONE_NO>{data(Phone)}/</PHONE_NO>
</CONTACT>
)