0

在 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] ] } }

文本在 office:body 中,但我不知道如何解析它。任何帮助将不胜感激

编辑:这是我的 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>

这应该是我的edited-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>
4

1 回答 1

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));

    ...

});  
于 2017-05-02T14:29:23.440 回答