2017-09-06 25 views
0

我有以下格式红宝石:将XML转换成JSON投入名称的值作为密钥和内容的值作为值

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <!-- I AM A COMMENT --> 

    <!-- General --> 
    <string name="foo">foo</string> 
    <string name="bar">bar</string> 
</resources> 

我希望我的JSON输出看起来像这样的机器人XML文件:

{ 
    "resources": { 
     "foo": "foo", 
     "bar": "bar" 
    } 
} 

也就是说,我希望节点名的值是键,和节点的内容的价值是在JSON KV对值。

这是可以用nokogiri属性吗?或破解?

或者我必须事先对XML进行预处理吗?

+1

我不会不会标记这个Android,因为它不是来自Android的XML - 它可以是任何XML,答案也是一样的。 – nasch

+0

好点 – Harunhh123

回答

1

您可以使用XSLT转换XML,然后用引入nokogiri改造它:

我使用的XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="resources"> 
{ 
    "resources": { 
     <xsl:for-each select="string"> 
      "<xsl:value-of select="./@name"/>": 
      "<xsl:value-of select="."/>" 
      <xsl:choose> 
       <xsl:when test="position() != last()">,</xsl:when> 
      </xsl:choose> 
     </xsl:for-each> 
    } 
} 
</xsl:template> 
</xsl:stylesheet> 

与引入nokogiri应用XSLT:

require 'nokogiri' 
document = Nokogiri::XML(File.read('input.xml')) 
template = Nokogiri::XSLT(File.read('template.xslt')) 
transformed_document = template.transform(document)