2012-04-28 62 views
0

我有以下XML文件:格式的XML文件

 <table name="countries"> 
      <column name="id">1</column> 
      <column name="name">Abkhazia</column> 
      <column name="code">XZ</column> 
      <column name="phone_code">+995</column> 
      <column name="flag">xz.gif</column> 
     </table> 

如何我這個XML格式是這樣的?

 <countries> 
      <id>1</id> 
      <name>Abkhazia</name> 
      <code>XZ</code> 
      <phone_code>+995</phone_code> 
      <flag>xz.gif</flag> 
     </countries> 

有沒有這方面的一些在線資源?

+0

基本上沒有什麼,我試圖找到,它可以格式化XML文件的一些在線資源,但我並沒有發現任何能幫助我,也許你知道一些資源這可能對我有幫助,我停止的唯一方法是 - 手動更改所有xml – ignotusverum 2012-04-28 19:26:53

+1

對於此,XSLT是最佳選擇。由於沒有標準的「重新格式化」方式,你需要編寫特定的指令(在XSLT中) – 2012-04-28 19:33:38

+0

如果它總是像這樣,那麼你可以使用正則表達式和簡單的替換函數,如果你想編寫這樣做的代碼,非常簡單的腳本。 – jcubic 2012-04-28 19:36:14

回答

2

這種短期和簡單改造專家:

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

<xsl:template match="*"> 
    <xsl:element name="{@name}"> 
    <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

當所提供的XML文檔應用:

<table name="countries"> 
    <column name="id">1</column> 
    <column name="name">Abkhazia</column> 
    <column name="code">XZ</column> 
    <column name="phone_code">+995</column> 
    <column name="flag">xz.gif</column> 
</table> 

產生想要的,正確的結果:

<countries> 
    <id>1</id> 
    <name>Abkhazia</name> 
    <code>XZ</code> 
    <phone_code>+995</phone_code> 
    <flag>xz.gif</flag> 
</countries> 
+0

非常感謝您的迴應! – ignotusverum 2012-04-28 19:45:40

+0

@anonymous:不客氣。請考慮接受最佳答案,以幫助讀者快速找到答案。 – 2012-04-28 19:47:44

3

這只是在任何編程語言的XML基本工作。我已經做到了在XSLT無需編程,產生所需的輸出(在這裏測試:XSLT Transformation - Online Toolz)改造,mabye有更優雅的方式,我不是在XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" encoding="utf-8" indent="no"/> 

<xsl:template match="table"> 
<xsl:variable name="tableName" select="@name"></xsl:variable> 
<xsl:element name="{$tableName}"> 
    <xsl:for-each select="column"> 
    <xsl:variable name="columnName" select="@name"></xsl:variable> 
    <xsl:element name="{$columnName}"> 
    <xsl:value-of select="."/> 
    </xsl:element> 
    </xsl:for-each> 
</xsl:element> 
</xsl:template> 
</xsl:stylesheet> 
+0

非常感謝!這幫助我很多! – ignotusverum 2012-04-28 19:41:39