在NodeJS中,我想在json中找到“此文本必须更改”。这是我目前的代码:
var fs = require('fs'),
parseString = require('xml2js').parseString,
xml2js = require('xml2js');
fs.readFile('content.xml', 'utf-8', function (err, data){
if(err) console.log(err);
parseString(data, function(err, result){
if(err) console.log(err);
var json = result;
console.log(json);
var needle = 'This text must change';
for (var i = 0; i < json.length; i++){
if (json[i] == needle){
console.log("Found it");
}
}
var builder = new xml2js.Builder();
var xml = builder.buildObject(json);
fs.writeFile('edited-test.xml', xml, function(err, data){
if (err) console.log(err);
console.log("successfully written our update xml to file");
})
});
});
这是我的console.log(json):
{ 'office:document-content':
{ '$':
{ 'xmlns:office': 'urn:oasis:names:tc:opendocument:xmlns:office:1.0',
'xmlns:style': 'urn:oasis:names:tc:opendocument:xmlns:style:1.0',
'xmlns:text': 'urn:oasis:names:tc:opendocument:xmlns:text:1.0',
'xmlns:table': 'urn:oasis:names:tc:opendocument:xmlns:table:1.0',
'xmlns:draw': 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0',
'xmlns:fo': 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0',
'xmlns:xlink': 'http://www.w3.org/1999/xlink',
'xmlns:dc': 'http://purl.org/dc/elements/1.1/',
'xmlns:meta': 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0',
'xmlns:number': 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0',
'xmlns:svg': 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0',
'xmlns:chart': 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0',
'xmlns:dr3d': 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0',
'xmlns:math': 'http://www.w3.org/1998/Math/MathML',
'xmlns:form': 'urn:oasis:names:tc:opendocument:xmlns:form:1.0',
'xmlns:script': 'urn:oasis:names:tc:opendocument:xmlns:script:1.0',
'xmlns:ooo': 'http://openoffice.org/2004/office',
'xmlns:ooow': 'http://openoffice.org/2004/writer',
'xmlns:oooc': 'http://openoffice.org/2004/calc',
'xmlns:dom': 'http://www.w3.org/2001/xml-events',
'xmlns:xforms': 'http://www.w3.org/2002/xforms',
'xmlns:xsd': 'http://www.w3.org/2001/XMLSchema',
'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:rpt': 'http://openoffice.org/2005/report',
'xmlns:of': 'urn:oasis:names:tc:opendocument:xmlns:of:1.2',
'xmlns:xhtml': 'http://www.w3.org/1999/xhtml',
'xmlns:grddl': 'http://www.w3.org/2003/g/data-view#',
'xmlns:tableooo': 'http://openoffice.org/2009/table',
'xmlns:textooo': 'http://openoffice.org/2013/office',
'xmlns:field': 'urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0',
'office:version': '1.2' },
'office:scripts': [ '' ],
'office:font-face-decls': [ [Object] ],
'office:automatic-styles': [ '' ],
'office:body': [ [Object] ] } }
文字在办公室:正文,但我不知道如何解析它。任何帮助将不胜感激
编辑: 这是我的content.xml:
<office:document-content office:version="1.2"><office:scripts/><office:font-face-decls><style:font-face style:name="Lucida Sans1" svg:font-family="'Lucida Sans'" style:font-family-generic="swiss"/><style:font-face style:name="Times New Roman" svg:font-family="'Times New Roman'" style:font-family-generic="roman" style:font-pitch="variable"/><style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/><style:font-face style:name="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/><style:font-face style:name="Microsoft YaHei" svg:font-family="'Microsoft YaHei'" style:font-family-generic="system" style:font-pitch="variable"/><style:font-face style:name="SimSun" svg:font-family="SimSun" style:font-family-generic="system" style:font-pitch="variable"/></office:font-face-decls><office:automatic-styles/><office:body><office:text><text:sequence-decls><text:sequence-decl text:display-outline-level="0" text:name="Illustration"/><text:sequence-decl text:display-outline-level="0" text:name="Table"/><text:sequence-decl text:display-outline-level="0" text:name="Text"/><text:sequence-decl text:display-outline-level="0" text:name="Drawing"/></text:sequence-decls><text:p text:style-name="Standard">This text must change</text:p></office:text></office:body></office:document-content>
这应该是我编辑的test.xml:
<office:document-content office:version="1.2"><office:scripts/><office:font-face-decls><style:font-face style:name="Lucida Sans1" svg:font-family="'Lucida Sans'" style:font-family-generic="swiss"/><style:font-face style:name="Times New Roman" svg:font-family="'Times New Roman'" style:font-family-generic="roman" style:font-pitch="variable"/><style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/><style:font-face style:name="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/><style:font-face style:name="Microsoft YaHei" svg:font-family="'Microsoft YaHei'" style:font-family-generic="system" style:font-pitch="variable"/><style:font-face style:name="SimSun" svg:font-family="SimSun" style:font-family-generic="system" style:font-pitch="variable"/></office:font-face-decls><office:automatic-styles/><office:body><office:text><text:sequence-decls><text:sequence-decl text:display-outline-level="0" text:name="Illustration"/><text:sequence-decl text:display-outline-level="0" text:name="Table"/><text:sequence-decl text:display-outline-level="0" text:name="Text"/><text:sequence-decl text:display-outline-level="0" text:name="Drawing"/></text:sequence-decls><text:p text:style-name="Standard">This is already changed text !</text:p></office:text></office:body></office:document-content>
答案 0 :(得分:2)
你能不能简单地做一些事情:
fs.readFile('content.xml', 'utf-8', function (err, data){
if(err) console.log(err);
parseString(data, function(err, result){
if(err) console.log(err);
var json = result;
console.log(json);
var needle = 'This text must change';
// Convert the result into a string, replace all instances of
// needle with some text, then parse the json string back into
// an object
json = JSON.parse(JSON.stringify(result).replace(needle, SOME_REPLACEMENT_TEXT_HERE));
...
});