簡體   English   中英

將XML轉換為其他格式?

[英]Convert XML to other format?

解析以下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)和所有(不包括客戶名稱的所有Number eat和weight對)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]

這樣就很容易以可編程方式迭代和提取的方式來組織它。

這是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文件更改時輕松進行調整。

我最近使用了SAXParser,它非常簡單並且易於實現。

特別是XMLReader的實現非常容易,而XMLStreamReader的實現僅花費更多時間。

Reader的好處是您可以從一個xml標記跳轉到下一個xml標記,然后從那里提取數據。 StreamReader的設置時間稍多一些,但更加靈活。

如果我是您,那么我只會讀一下SAXParser和DOMParsers之間的區別,並確定最適合您的情況並運行它。

確實是XSLT,或者如果您的示例非常簡單,並且您不想“學習” XSLT,我建議您

  • 使用JAXB從XML輕松創建對象
  • 然后輸出您認為適合文件的對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM