Rmove атрибут xmlns - PullRequest
       8

Rmove атрибут xmlns

5 голосов
/ 28 октября 2009

Я пытаюсь удалить атрибут xmlns="http://webdev2003.test.com" из следующего xml с помощью xsl / xslt, требования Задачи XML в SSIS Какова правильная методология, учитывая большой размер файла. ~ 40MB

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfAccount xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">    
<Account>  
    <FirstName xmlns="http://webdev2003.test.com/">John</FirstName>  
    <LastName xmlns="http://webdev2003.test.com/">Smith</LastName>  
</Account>  
</ArrayOfAccount>

Ответы [ 3 ]

3 голосов
/ 28 октября 2009

Я ненавижу, когда отвечаю на свои вопросы, но заслуга - http://blogs.msdn.com/kaevans/archive/2003/06/13/8679.aspx

Первая часть примера показывает, как удалить все атрибуты, которые в моем сценарии работают. Возможно, есть лучшее решение?

1 голос
/ 29 октября 2009

Я думаю, что вы можете удалить объявления пространства имен, как описано в этой статье . Похоже, вам, возможно, придется объявить префикс для пространства имен в таблице стилей перед добавлением его в атрибут exclude-result-prefixes.

Вы можете предотвратить это с помощью атрибута exclude-result-prefixes элемента xsl: stylesheet. Имя этого атрибута может сбивать с толку, потому что префиксы пространства имен все равно будут отображаться в дереве результатов. Это не означает «исключить префиксы из результата»; это означает «исключить пространства имен с этими префиксами».

0 голосов
/ 28 октября 2009

А как же

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsl:template match="*">
    <xsl:element name="{name()}">
      <xsl:apply-templates select="attribute::*"/>
      <xsl:if test="namespace-uri()!='http://webdev2003.test.com/' and
              namespace-uri()!=''">
        <xsl:attribute name="xmlns">
          <xsl:value-of select="namespace-uri()"/>
        </xsl:attribute>
      </xsl:if>
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="@*">
    <xsl:attribute name="{name()}">
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>
</xsl:stylesheet>

...