2013-12-18 2 views
1

У меня есть следующий XML и хотите, чтобы вывод не содержит декларации XML т.е.Использование XSLT для копирования XML без объявления XML

ОТ

<?xml version="1.0" encoding="UTF-8"?> 
<tns:MFTRNS xmlns:tns="MFTRNS" recordState="New" msgVersion="13.0"> 
<OSCONO>100</OSCONO> 
<OSINOU>1</OSINOU> 
<OSDLIX>155379</OSDLIX> 
<OSPANR>AAG44780</OSPANR> 
<OSWHLO>AAG</OSWHLO> 
</tns:MFTRNS> 

К

<tns:MFTRNS xmlns:tns="MFTRNS" recordState="New" msgVersion="13.0"> 
<OSCONO>100</OSCONO> 
<OSINOU>1</OSINOU> 
<OSDLIX>155379</OSDLIX> 
<OSPANR>AAG44780</OSPANR> 
<OSWHLO>AAG</OSWHLO> 
</tns:MFTRNS> 

Может вы получаете xslt для этого, и если да, то как?

Причиной для этого является то, что я хочу, чтобы обернуть XML в конверте, который не может быть сделано, если декларация является частью XML, поскольку это не создает допустимый файл XML

Благодаря

ответ

0

Это просто: вы должны установить атрибут omit-xml-declaration вашего xsl:output element в yes.

2

Если вы только хотите удалить объявление, то таблица стилей так просто, как это сделать:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" omit-xml-declaration="yes" /> 

    <xsl:template match="/"> 
    <xsl:copy-of select="node()" /> 
    </xsl:template> 
</xsl:stylesheet> 

Но если ваша конечная цель состоит в том, чтобы «обернуть XML в конверте», то вы могли бы лучше делать это непосредственно в XSLT, например:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" /> 

    <xsl:template match="/"> 
    <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"> 
     <xsl:copy-of select="node()" /> 
    </soap:Envelope> 
    </xsl:template> 
</xsl:stylesheet> 

который будет безопаснее, чем пытаться объединить два файла с использованием не-XML-Aware текстовые операции. Например, если ваш конверт объявляет пространство имен по умолчанию xmlns="http://example.com", то просто вставка текста другого XML-документа внутри конверта изменит семантику, так как он переместит не префиксные элементы, такие как OSCONO, в пространство имен по умолчанию конверта, когда они действительно не будут Пространство имен. XSLT обнаружит этот случай и добавит необходимые xmlns="" переопределения.

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