2009-11-22 3 views
0

Вот пример вывода XQuery, что я получаю:XQuery: странный атрибут XSI, вставляемые в мой выход XQuery

<clinic> 
    <Name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Healthy Kids Pediatrics</Name> 
    <Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">510 W 27th St, Los Angeles, CA 90007</Address> 
    <PhoneNumberList>213-555-5845</PhoneNumberList> 
    <NumberOfPatientGroups>2</NumberOfPatientGroups> 
</clinic> 

Как вы можете видеть, в <Name> и <Address> теге, есть такие странные XMLNS : к нему добавляются теги xsi.

Самое смешное, если я пойду в верхней части моего файла XML, и удалить:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="vaccination.xsl"?> 
<Vaccination xsi:noNamespaceSchemaLocation="vaccination.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

фразу

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

Тогда теперь мой XQuery выход XML будет выглядеть следующим образом (который это то, что я хочу)

<clinic> 
    <Name>Healthy Kids Pediatrics</Name> 
    <Address>510 W 27th St, Los Angeles, CA 90007</Address> 
    <PhoneNumberList>213-555-5845</PhoneNumberList> 
    <NumberOfPatientGroups>2</NumberOfPatientGroups> 
</clinic> 

НО, когда я просматривать мой XML в моем браузере, он выдаст сообщение об ошибке и отображения что-нибудь г как:

XML Parsing Error: prefix not bound to a namespace 
Location: file:///C:/Users/Pac/Desktop/csci585-hw3/vaccination.xml 
Line Number 3, Column 1:<Vaccination xsi:noNamespaceSchemaLocation="vaccination.xsd"> 
^ 

Кто-нибудь есть идеи о том, как удалить эти XSI теги из моего вывода XQuery, не нарушая мой XML/XSL?

ответ

2

Удаление объявления пространства имен из верхнего узла делает документ XML недействительным, поскольку префикс xsi используется, но не объявлен. Это должно было вызвать ошибку при попытке загрузить документ в запросе.

Я предполагаю, что узлы имени и адреса копируются непосредственно из исходного документа, а остальные узлы построены.

При копировании узла из исходного документа пространства имен пространства имен из исходного узла объединены с областями имен областей в узле, который содержит копию. То, как они объединены, задается режимом copy-namespaces-mode.

В вашем случае вы хотите, чтобы пространства имен были унаследованы от родительского узла (узла в запросе), но вы не хотите сохранять пространства имен в исходном документе, где они не нужны.

Это может быть достигнуто путем добавления следующей строки в верхней части запроса:

declare copy-namespaces no-preserve, inherit; 
+0

Идеальный. Работает как шарм. Спасибо! – sivabudh

Смежные вопросы