0

次の XML を解析する最も簡単な方法は何ですか?

<Fruit>
  <FruitId>Bannana</FruitId>
  <FruitColor>Yellow</FruitColor>
  <FruitShape>Moon</FruitShape>
  <Customer>
     <Name>Joe</Name>
     <Numbereaten>5</NumberEaten>
     <Weight>2.6</Weight>
  </Customer>
  <Customer>
     <Name>Mark</Name>
     <Numbereaten>8</NumberEaten>
     <Weight>5.0</Weight>
  </Customer>
</Fruit>
<Fruit>

.....

複数の XML ファイルがあり、特定のフィールド (フルーツ ID) とすべて (顧客名を除く食べた数と重量のペア) のみに対応する csv を作成できるように情報を抽出したいとします。理想的には、以下を表すデータ構造または csv を取得できるようにしたいと考えています。

Bannana, 5, 2.6
Bannana, 8, 5
...
Apple 6, 5
Apple 3, 2

Java 用の DOMParser と SAXParser があることは知っていますが、この情報を簡単に取得するための他の言語または他の手段が、2013 年にこれを簡素化するために利用できるようになったのではないかと考えています。または、いくつかを含む辞書データ構造でデータをキャプチャすることもできます。

Bannana: [5,2.6], [8,5]

プログラムで反復可能で抽出できる方法で簡単に整理できるようにします。

4

3 に答える 3

1

これは、XSLT の典型的な使用例です。

この例では、XSLT ファイルは次のようになります。

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output method="text" encoding="ISO-8859-1" />
    <xsl:variable name="newline" select="'&#xA;'"/>
    <xsl:template match="Fruit">
        <xsl:for-each select="Customer">
            <xsl:value-of select="preceding-sibling::FruitId" />
            <xsl:text>,</xsl:text>
            <xsl:value-of select="Numbereaten" />
            <xsl:text>,</xsl:text>
            <xsl:value-of select="Weight" />
            <xsl:value-of select="$newline" />
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

変換には、次の Java コードを使用できます。

   Source xmlSource = new StreamSource(new File("xmlFile"));
   Source xsltSource = new StreamSource(new File("xsltFile"));
   Transformer transformer = TransformerFactory.newInstance().newTransformer();
   StreamResult csvResult = new StreamResult(new File("file.csv"));
   transformer.transform(xmlSource, csvResult);

XSLT バージョンの利点は、Java コードが非常に短いことです。XSLT ファイルはコードの外に置くことができ、XML ファイルが変更されたときに簡単に適応させることができます。

于 2013-05-10T19:43:35.003 に答える