移除 xmlns 属性

5
我正在尝试使用xsl/xslt从以下XML中删除属性xmlns="http://webdev2003.test.com",这是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>

SSIS中没有适当的命名空间处理吗? - Tomalak
3个回答

3

1

我认为你可以按照this article中所述的方法删除命名空间声明。在将其添加到exclude-result-prefixes属性之前,你可能需要在样式表中声明命名空间的前缀。

你可以使用xsl:stylesheet元素的exclude-result-prefixes属性来防止这种情况发生。这个属性的名称可能会让人感到困惑,因为命名空间前缀仍然会出现在结果树中。它的意思不是“在结果中排除前缀”,而是“排除具有这些前缀的命名空间”。


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>

?


我从XML Notepad中收到一个错误 - 无法创建具有本地名称“xmlns”和空命名空间URI的属性。在MSVS错误中,分别为:无法创建具有本地名称“xmlns”和空命名空间URI的属性。 - decompiled

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接