0

私はこのXMLを持っています:

<org.mule.module.json.JsonData>
  <node class="org.codehaus.jackson.node.ObjectNode">
    <__nodeFactory/>
    <__children>
      <entry>
        <string>freshdesk_webhook</string>
        <org.codehaus.jackson.node.ObjectNode>
          <__nodeFactory reference="../../../../__nodeFactory"/>
          <__children>
            <entry>
              <string>ticket_id</string>
              <org.codehaus.jackson.node.IntNode>
                <__value>7097</__value>
              </org.codehaus.jackson.node.IntNode>
            </entry>
            <entry>
              <string>ticket_requester_email</string>
              <org.codehaus.jackson.node.TextNode>
                <__value>walter@white.com</__value>
              </org.codehaus.jackson.node.TextNode>
            </entry>
          </__children>
        </org.codehaus.jackson.node.ObjectNode>
      </entry>
    </__children>
  </node>
</org.mule.module.json.JsonData>

そして、XSLT で次のように変換する必要があります。

<root>
  <entry>
    <name>freshdesk_webhook</name>
    <value>
      <entry>
        <name>ticket_id</name>
        <value>7097</value>
      </entry>
      <entry>
        <name>ticket_requester_email</name>
        <value>walter@white.com</value>
      </entry>
    </value>
  </entry>
</root>

変身は簡単だと思います。しかし、今日は多くの XSLT をテストしましたが、まだ結果が得られていません。再帰的な XSLT を取得して重い XML を簡単な XML に変換するにはどうすればよいですか?

助けてください。

4

1 に答える 1

3

これは、特定のノードに明示的に一致する要素がない場合、XSLT の組み込みテンプレート ルールが要素の子を処理し続け、テキスト ノードのデフォルト ルールが単にテキストを出力するという事実のおかげで、かなり簡単です。したがって、マッピングは次のようになります

  • トップレベルの文書要素 ->root
  • entry->entry
  • 各エントリの最初の子要素 ​​->name
  • 各エントリの 2 番目の子要素 ​​->value

それ以外の場合は、デフォルトの「子供たちと一緒に行く」ルールを使用してください

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*" />
  <xsl:output indent="yes" />

  <xsl:template match="/*">
    <root><xsl:apply-templates /></root>
  </xsl:template>

  <xsl:template match="entry">
    <entry><xsl:apply-templates /></entry>
  </xsl:template>

  <xsl:template match="entry/*[1]">
    <name><xsl:apply-templates /></name>
  </xsl:template>

  <xsl:template match="entry/*[2]">
    <value><xsl:apply-templates /></value>
  </xsl:template>
</xsl:stylesheet>

これxsl:strip-spaceにより、スタイルシートは入力 XML (空白のみのテキスト ノード) のすべてのインデントを無視し、要素と重要なテキスト (stringおよび__value要素のコンテンツ) だけに集中するため、これは重要です。

于 2013-10-31T13:15:55.543 に答える