如何将XML文件转换为硬编码对象?

时间:2018-02-14 15:24:27

标签: xml typescript

我有一个像这样的XML文件:

<Obj something1="test" something2="test">
    <children something1="test" />
        <something2>test</something2>
    </children>
</Obj>

并希望将其转换为像这样的硬编码对象(Typeschript):

var Obj = {
    something1: "test",
    something2: "test",
    children: [{
            something1: "test",
            something2: "test"
        }]
};

有没有这样做的工具?

1 个答案:

答案 0 :(得分:0)

您要查找的工具名为XSLT (W3Schools) 以下XSLT-1.0样式表创建了您要查找的输出:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>

  <xsl:template match="Obj">
    <xsl:text>var Obj = { &#x0A;</xsl:text>
      <xsl:for-each select="@* | *[count(child::*) = 0]">
        <xsl:value-of select="local-name()" />: <xsl:value-of select="." />
        <xsl:if test="position() != last()">,</xsl:if>
      </xsl:for-each>
      <xsl:if test="count(child::*) > 0">,</xsl:if>
      <xsl:apply-templates />
    };
  </xsl:template>

  <xsl:template match="children">
    <xsl:text>children: [{&#xa;</xsl:text>
      <xsl:for-each select="@* | *[count(child::*) = 0]">
        <xsl:value-of select="local-name()" />: <xsl:value-of select="." />
        <xsl:if test="position() != last()">,</xsl:if>
      </xsl:for-each>
    }]
  </xsl:template>

</xsl:stylesheet>

<强>输出:

var Obj = { 
    something1: test,something2: test,
    children: [{
        something1: test,something2: test
    }]
    };

如果您可以使用XSLT-2.0或XSLT-3.0,则可以进一步简化此样式表。