C# 将结构XML转换为平面XML(某些列除外)

C# 将结构XML转换为平面XML(某些列除外),c#,xml,sqlite,C#,Xml,Sqlite,我已经将一个SQLite数据库导出为结构化XML,然后在c#.net中使用以下代码将其转换为平面XML XML的结构如下所示 <apple> <id>1</id> <name>Apple 1</name> <orange> <id>5</id> <orangeNmae>C1</orangeNmae>

我已经将一个SQLite数据库导出为结构化XML,然后在c#.net中使用以下代码将其转换为平面XML

XML的结构如下所示

<apple>
      <id>1</id>
      <name>Apple 1</name>
      <orange>
        <id>5</id>
        <orangeNmae>C1</orangeNmae>
        <function>good for health</function>
        <part>7</part>
        <banana>
          <id>9</id>
          <bananaName>48</bananaName>
          <effect>23</effect>         
          <notes>be careful</notes>
        </banana>
        <banana>
          <id>10</id>
          <bananaName>49</bananaName>
          <effect>24</effect>         
          <notes>be careful!</notes>        
        </banana>
      </orange>
</apple>
<apple id="1" name="Apple 1">
      <orange id="5" orangeNmae="C1" function="good for health" part="7">        
        <banana id="9" bananaName="48" effect="23" notes="be careful" />
        <banana id="10" bananaName="49" effect="24" notes="be careful" />        
      </orange>
</apple>
<apple id="1" name="Apple 1">
      <orange id="5" orangeNmae="C1" function="good for health" part="7">        
        <banana id="9" bananaName="48" />               
          <notes>be careful</notes>
          <effect>23</effect>
        <banana id="10" bananaName="49" />                   
          <notes>be careful</notes>
          <effect>23</effect>       
      </orange>
</apple>

1.
苹果1
5.
C1
有益健康
7.
9
48
23
小心
10
49
24
小心!
生成的平面xml如下所示

<apple>
      <id>1</id>
      <name>Apple 1</name>
      <orange>
        <id>5</id>
        <orangeNmae>C1</orangeNmae>
        <function>good for health</function>
        <part>7</part>
        <banana>
          <id>9</id>
          <bananaName>48</bananaName>
          <effect>23</effect>         
          <notes>be careful</notes>
        </banana>
        <banana>
          <id>10</id>
          <bananaName>49</bananaName>
          <effect>24</effect>         
          <notes>be careful!</notes>        
        </banana>
      </orange>
</apple>
<apple id="1" name="Apple 1">
      <orange id="5" orangeNmae="C1" function="good for health" part="7">        
        <banana id="9" bananaName="48" effect="23" notes="be careful" />
        <banana id="10" bananaName="49" effect="24" notes="be careful" />        
      </orange>
</apple>
<apple id="1" name="Apple 1">
      <orange id="5" orangeNmae="C1" function="good for health" part="7">        
        <banana id="9" bananaName="48" />               
          <notes>be careful</notes>
          <effect>23</effect>
        <banana id="10" bananaName="49" />                   
          <notes>be careful</notes>
          <effect>23</effect>       
      </orange>
</apple>

现在我需要保留一些列,如结构化XML,如下所示

<apple>
      <id>1</id>
      <name>Apple 1</name>
      <orange>
        <id>5</id>
        <orangeNmae>C1</orangeNmae>
        <function>good for health</function>
        <part>7</part>
        <banana>
          <id>9</id>
          <bananaName>48</bananaName>
          <effect>23</effect>         
          <notes>be careful</notes>
        </banana>
        <banana>
          <id>10</id>
          <bananaName>49</bananaName>
          <effect>24</effect>         
          <notes>be careful!</notes>        
        </banana>
      </orange>
</apple>
<apple id="1" name="Apple 1">
      <orange id="5" orangeNmae="C1" function="good for health" part="7">        
        <banana id="9" bananaName="48" effect="23" notes="be careful" />
        <banana id="10" bananaName="49" effect="24" notes="be careful" />        
      </orange>
</apple>
<apple id="1" name="Apple 1">
      <orange id="5" orangeNmae="C1" function="good for health" part="7">        
        <banana id="9" bananaName="48" />               
          <notes>be careful</notes>
          <effect>23</effect>
        <banana id="10" bananaName="49" />                   
          <notes>be careful</notes>
          <effect>23</effect>       
      </orange>
</apple>

小心
23
小心
23
谁能告诉我怎么做吗?
在将结构化XML转换为平面XML时,是否应该改变方法?

此XSLT为您进行转换。我使用模板匹配元素,并使用XSLT处理器的模式功能首先处理属性的转换,然后处理其他元素

  <!-- elements to be transformed to attributes -->
  <xsl:template match="*[not(text()[normalize-space()])]">
    <xsl:element name="{name()}">
      <xsl:apply-templates mode="attr"/>
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>

  <!-- copy elements not handled as attribute -->
  <xsl:template match="effect|notes">
    <xsl:copy-of select="."/>
  </xsl:template>

  <!-- create attributes excluding certain elements -->
  <xsl:template match="*[text()[normalize-space()] and not(self::effect | self::notes)]" mode="attr">
    <xsl:attribute name="{name()}">
      <xsl:value-of select="./text()"/>
    </xsl:attribute>
  </xsl:template>

  <!-- surpress defaults -->
  <xsl:template match="text()">
  </xsl:template>
  <xsl:template match="*|text()" mode="attr">
  </xsl:template>

XSLT转换不是更适合这种情况吗?您能给我举个例子吗?有没有办法跳过转换为平面xml的一些列?