0

XML ドキュメント内の空の要素を削除しようとしています。空のときにid31、id32、およびid33を削除したい。以下は、XSLT 出力の例です。以下の XSLT を使用しようとしていますが、うまくいきません。私が間違っていることについてのアイデアはありますか?ありがとう

データ

<Item type="Part AML">
    <related_id>
      <Item type="Manufacturer Part">
        <id keyed_name="1234" type="Manufacturer Part"></id>
        <manufacturer keyed_name="Bobs Workshop" type="Manufacturer"></manufacturer>
        <item_number>1234</item_number>
      </Item>
    </related_id>
  </Item>
  <Item type="Part Document">
    <related_id keyed_name="D000005" type="Document">
      <Item type="Document">
        <id keyed_name="D000005" type="Document"></id>
        <major_rev>B</major_rev>
        <name>Firmware 8-16-12</name>
        <item_number>D000005</item_number>
      </Item>
    </related_id>
  </Item>
  <Item type="Part Document">
    <related_id keyed_name="D000003" type="Document">
      <Item type="Document">
        <id keyed_name="D000003" type="Document"></id>
        <major_rev>A</major_rev>
        <name>Design Spec</name>
        <item_number>D000003</item_number>
      </Item>
    </related_id>
  </Item>

出力

 <td width="5%" align="center" uniqueID="ms__id31"></td>
 <td width="13%" align="center" uniqueID="ms__id32"></td>
 <td width="13%" align="center" uniqueID="ms__id33"></td>
 <td width="5%" align="center" uniqueID="ms__id34">D000003</td>
 <td width="13%" align="center" uniqueID="ms__id35">Design Spec</td>
 <td width="8%" align="center" uniqueID="ms__id36">A</td>

フォーラムからのコード

  <xsl:template match="node()|@*">
   <xsl:copy>
     <xsl:apply-templates select="node()|@*"/>
 </xsl:copy>
   </xsl:template>

<xsl:template match="*[not(@*|*|comment()|processing-instruction()) and normalize-space()='']"/>

私の XSLT

<xsl:template match="Item[@type='Part AML']|Item[@type='Part Document']">
<tr>
  <td width="5%" align="center" uniqueID="ms__id31">
    <xsl:value-of select="state"/>
  </td>
  <td width="13%" align="center" uniqueID="ms__id32">
    <xsl:value-of select="related_id[@type='Manufacturer Part']/Item/manufacturer/@keyed_name"/>
  </td>
  <td width="13%" align="center" uniqueID="ms__id33">
    <xsl:value-of select="related_id[@type='Manufacturer Part']/Item/item_number"></xsl:value-of>
  </td>
    <td width="13%" align="center" uniqueID="ms__id34">
        <xsl:value-of select="related_id[@type='Document']/Item/item_number"></xsl:value-of>
    </td>
    <td width="13%" align="center" uniqueID="ms__id35">
        <xsl:value-of select="related_id[@type='Document']/Item/name"/>
    </td>
    <td width="8%" align="center" uniqueID="ms__id36">
        <xsl:value-of select="related_id[@type='Document']/Item/major_rev"/>
    </td>
 </tr>

4

1 に答える 1

1

テンプレートを使用します。このように、空のケースでは何も適用されません。

<xsl:template match="Item[@type='Part AML']|Item[@type='Part Document']">
<tr>
    <xsl:apply-templates select="state"/>

    <xsl:apply-templates select="related_id[@type='Manufacturer Part']/Item/manufacturer/@keyed_name"/>

    <xsl:apply-templates select="related_id[@type='Manufacturer Part']/Item/item_number">

    <td width="13%" align="center" uniqueID="ms__id34">
        <xsl:value-of select="related_id[@type='Document']/Item/item_number"></xsl:value-of>
    </td>
    <td width="13%" align="center" uniqueID="ms__id35">
        <xsl:value-of select="related_id[@type='Document']/Item/name"/>
    </td>
    <td width="8%" align="center" uniqueID="ms__id36">
        <xsl:value-of select="related_id[@type='Document']/Item/major_rev"/>
    </td>
 </tr>
</xsl:template>

<xsl:template match="Item[@type='Part AML' or @type='Part Document']/state">
  <td width="5%" align="center" uniqueID="ms__id31">
     <xsl:apply-templates>
  </td>
</xsl:template>

<xsl:template match="Item[@type='Part AML' or @type='Part Document']/related_id[@type='Manufacturer Part']/Item/manufacturer/@keyed_name">
   <td width="13%" align="center" uniqueID="ms__id32">
     <xsl:apply-templates>
  </td>
</xsl:template>

<xsl:template match="Item[@type='Part AML' or @type='Part Document']/related_id[@type='Manufacturer Part']/Item/item_number">
   <td width="13%" align="center" uniqueID="ms__id33">
     <xsl:apply-templates>
  </td>
</xsl:template>

<td>残りの s にも空の値がある場合は、同じパターンを使用できます。

于 2012-12-21T20:21:49.287 に答える