5

我正在尝试xmlns="http://webdev2003.test.com"使用 xsl/xslt 从以下 xml 中删除该属性,这是 SSIS 中 XML 任务的要求。考虑到大文件大小,什么是合适的方法。~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>
4

3 回答 3

3

我讨厌回答自己的问题,但功劳归于 - http://blogs.msdn.com/kaevans/archive/2003/06/13/8679.aspx

示例的第一部分列出了如何删除在我的场景中有效的所有属性。也许有更好的解决方案?

于 2009-10-28T19:21:01.903 回答
1

我认为您可以删除本文所述的名称空间声明。看起来您可能必须在样式表中为命名空间声明一个前缀,然后再将其添加到 exclude-result-prefixes 属性。

您可以使用 xsl:stylesheet 元素的 exclude-result-prefixes 属性来防止这种情况发生。该属性的名称可能会让人感到困惑,因为名称空间前缀仍会显示在结果树中。这并不意味着“排除结果中的前缀”;它的意思是“排除带有这些前缀的命名空间”。

于 2009-10-29T18:42:12.433 回答
0

关于什么

<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>

?

于 2009-10-28T18:58:23.527 回答