2014-09-26 3 views
0

XSLT гуру,XSLT-документа() результат функции содержит нежелательные Xmlns = ""

У меня есть XSLT, который в том числе нежелательный Xmlns = "" в выходном сигнале. Я видел эту проблему/заданный вопрос и много раз отвечал на этом сайте, но, похоже, я не могу получить ответы на все, что я делаю. И я должен предупредить вас, что я новичок в XSLT и не очень хорош в этом.

Мой XSLT собирает набор данных из приложения, которое его вызывает, а затем также использует document() для получения дополнительных данных. Это все работает отлично, мне просто нужно избавиться от Xmlns = «»

XML, называют документом() является

<?xml version="1.0" encoding="UTF-8"?><BiExport xmlns=""> 
<ExportData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<Phone>8885551212</Phone> 
<ClientRefCmtSuffix/> 
<UDFData> 
<DictionaryEntry> 
<Key xsi:type="xsd:string">MyCompany Completed Date</Key> 
<Value xsi:type="xsd:string">06/24/2013</Value> 
</DictionaryEntry> 
<DictionaryEntry> 
<Key xsi:type="xsd:string">Rush</Key> 
<Value xsi:type="xsd:string">0</Value> 
</DictionaryEntry> 
<DictionaryEntry> 
<Key xsi:type="xsd:string">Suffix</Key> 
<Value xsi:type="xsd:string">0000000000</Value> 
</DictionaryEntry> 
</UDFData> 
<ReportCreateDate>2014-09-26T15:45:48.83952-07:00</ReportCreateDate> 
</ExportData> 
</BiExport> 

И да, я не знаю, что это имеет <BiExport xmlns="">, не могу 't измените это, и даже когда я удалил его перед применением моего XSLT, это не имело никакого значения.

Мой XSLT является

<?xml version='1.0' ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:bean="http://www.MyCompany.com/eventgenerator/beans"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no" /> 

    <xsl:variable name="ReportCreateDate" select="bean:FileEvent/bean:Context[@Id='XPathStep']/bean:Item[@Name='ReportCreateDate']/@Value"/> 
    <xsl:variable name="PDFFile" select="concat($PDFFilename, '.', $PDFFileExt)"/> 
    <xsl:variable name="InputFile" select="bean:FileEvent/bean:Context[@Id='XPathStep']/bean:Item[@Name='InputFile']/@Value"/> 
    <xsl:variable name="PDFFilename" select="bean:FileEvent/bean:Context[@Id='XSLTStep']/bean:Item[@Name='PDFFilename']/@Value"/> 
    <xsl:variable name="InputFilePath" select="bean:FileEvent/bean:Context[@Id='ArchiveMessageStep']/bean:Item[@Name='ArchiveDirectory']/@Value"/> 
    <xsl:variable name="InputFileString" select="concat($InputFilePath, '\', $PDFFilename, '.xml')"/> 

    <xsl:template name="UDFs" match="document($InputFileString)/BiExport/ExportData/UDFData/DictionaryEntry"> 
    <xsl:param name="pKey" select="." /> 
    <Item name="{$pKey}"> 
     <xsl:value-of select="../Value"/> 
    </Item> 
    </xsl:template> 

    <xsl:template match="/"> 
    <MDXPackage version="1.0" xmlns="http://www.MyCompany.com/schemas"> 
     <Payload> 
     <PayloadContext> 

      <xsl:apply-templates select="document($InputFileString)/BiExport/ExportData/UDFData/DictionaryEntry/Key" /> 

      <xsl:choose> 
      <xsl:when test="string($ReportCreateDate)"> 
       <Item name="ReportCreateDate"> 
       <xsl:value-of select="$ReportCreateDate"/> 
       </Item> 
      </xsl:when> 
      <xsl:otherwise></xsl:otherwise> 
      </xsl:choose> 

      <xsl:choose> 
      <xsl:when test="string($PDFFile)"> 
       <Item name="PDFFile"> 
       <xsl:value-of select="$PDFFile"/> 
       </Item> 
      </xsl:when> 
      <xsl:otherwise></xsl:otherwise> 
      </xsl:choose> 
      <!-- more of the same follows--> 

     </PayloadContext> 
     </Payload> 
    </MDXPackage> 
    </xsl:template> 
</xsl:stylesheet> 

И выход

<MDXPackage xmlns="http://www.mitchell.com/schemas" version="1.0"> 
<Payload> 
<PayloadContext> 
<Item xmlns="" name="MyCompany Completed Date">06/24/2013</Item> 
<Item xmlns="" name="Rush">0</Item> 
<Item xmlns="" name="Suffix">0000000000</Item> 
<Item name="ReportCreateDate">2014-09-26T13:53:28.3831684-07:00</Item> 
<Item name="ClaimantPhone">8885551212</Item> 
</PayloadContext> 
</Payload> 
</MDXPackage> 

Заранее спасибо за любую помощь в понимании того, почему я получаю пустую декларацию пространства имен и как избавиться от него.

DL

+0

Что входит в ваш документ ввода (документ XML, к которому применяется преобразование)? –

ответ

4

Это все работает отлично, мне просто нужно избавиться от Xmlns = ""

Это не вопрос избавления от Xmlns = "". Они существуют по уважительной причине. Причина в том, что исходные элементы MDXPackage, Payload и PayloadContext находятся в пространстве имен ("http://www.mitchell.com/schemas"), а Item s - нет.

Если вы хотите удалить привязки пространства имен без имен, вы должны поместить элементы в том же пространстве имен, что и их предки. Она вероятно означает изменение этого:

<Item name="{$pKey}"> 
    <xsl:value-of select="../Value"/> 
    </Item> 

к:

<Item xmlns="http://www.MyCompany.com/schemas" name="{$pKey}"> 
    <xsl:value-of select="../Value"/> 
</Item> 

Обратите внимание, что это не косметическое изменение; он фактически изменяет имя элемента.

+1

Альтернативным способом достижения этой же цели было бы перемещение 'xmlns =" ​​http://www.MyCompany.com/schemas "из' MDXPackage' внутри шаблона на верхний уровень 'xsl: stylesheet' , Это могло бы привести к тому, что все элементы без лимитирования в таблице стилей будут помещены в это пространство имен. –

+0

+1 Я пробовал это, и он тоже работал. Благодаря Иан и Майклу. – DLoysen

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