[英]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="'
'"/>
<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,我建議您
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.