2012-04-28 66 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