5

xmlns="http://webdev2003.test.com"SSIS の XML タスクの要件である xsl/xslt を使用して、次の 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 に答える