Вот мой XML-документ:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="student.xsl"?>
<Students xmlns="www.example.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="www.example.com student.xsd">
<Student>
<SSN>622-12-5748</SSN>
<Name>
<First-Name>Alexander</First-Name>
<Last-Name>Mart</Last-Name>
</Name>
<Age>26</Age>
<Institution>UCSF</Institution>
<Email>Alexander@yahoo.com</Email>
</Student>
</Students>
У меня есть этот XQuery:
xquery version "1.0";
declare namespace xsd = "http://www.w3.org/2001/XMLSchema";
declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
declare default element namespace "http://www.example.com";
for $s in doc("student.xml")/Students/Student
let $firstName := $s/First-Name
let $lastName := $s/Last-Name
let $email := $s/Email
order by $lastName ascending
return
<row>
<first-name> { $firstName } </first-name>
<last-name> { $lastName } </last-name>
<email> { $email } </email>
</row>
Вывод, который я получаю:
<row xmlns="http://www.example.com">
<first-name>
<First-Name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>Alexander</First-Name>
</first-name>
<last-name>
<Last-Name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>Mart</Last-Name>
</last-name>
<email>
<Email xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>Alexander@yahoo.com</Email>
</email>
</row>
Все примеры, которые я вижу, выводят что-то вроде этого:
<row>
<first-name>Alexander</first-name>
<last-name>Mart</last-name>
<email>Alexander@yahoo.com</email>
</row>
Как мне красиво отформатировать вывод?
Кроме того, почему я получаю это
<First-Name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
тег в моих результатах, а не просто <first-name>
? Есть ли способ избавиться от этого? Я добавил declare default element namespace "http://www.example.com";
в верхней части, потому что я не мог заставить свой XQuery работать без него. Но было бы здорово, если бы это не отображалось в моих результатах.