我有一个以下格式的XML XML文件
<?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输出看起来像这样:
{
"resources": {
"foo": "foo",
"bar": "bar"
}
}
也就是说,我希望节点名称的值为Keys,并且节点内容的值为JSON KV对中的值。
是否可以使用nokogiri属性?还是破解?
或者我必须事先对XML进行预处理吗?
答案 0 :(得分: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>
将XSLT应用于nokogiri:
require 'nokogiri'
document = Nokogiri::XML(File.read('input.xml'))
template = Nokogiri::XSLT(File.read('template.xslt'))
transformed_document = template.transform(document)