Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

146
Visualizações
¿Cómo analizar y agregar al archivo XML un nuevo contenido?

Tengo un archivo XML codificado que necesito analizar y agregar contenido.

Este es el archivo:

 <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="PropertiesComponent"><![CDATA[{ "keyToString": { "RunOnceActivity.OpenProjectViewOnStart": "true" } }]]></component> </project>

Mi objetivo es convertirlo a:

 <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="PropertiesComponent"><![CDATA[{ "keyToString": { "RunOnceActivity.OpenProjectViewOnStart": "true", "test": 5 } }]]></component> </project>

Tengo el siguiente código JS para hacerlo:

 const path = require('path'); const fs = require('fs-extra'); const xml2js = require('xml2js'); const xmlFilePath = path.join(__dirname, './resource.xml'); const xmlFileDestPath = path.join(__dirname, './resource-new.xml'); (async () => { const xmlContent = await fs.readFile(xmlFilePath, 'utf-8').catch(() => ''); const parsedXml = await xml2js.parseStringPromise(xmlContent); const objectToAppend = parsedXml['project']['component'][0]['_']; const parsedObject = JSON.parse(objectToAppend); const parsedKeyToString = parsedObject['keyToString']; const newObject = { ...parsedKeyToString, test: 5 }; parsedXml['project']['component'][0]['_'] = JSON.stringify({ keyToString: newObject }); const builder = new xml2js.Builder({ xmldec: { version: '1.0', encoding: 'UTF-8' }, cdata: true, }); const workspaceXmlFileContent = builder.buildObject(parsedXml); await fs.writeFile(xmlFileDestPath, workspaceXmlFileContent); })();

Pero el archivo de salida es:

 <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="PropertiesComponent">{"keyToString":{"RunOnceActivity.OpenProjectViewOnStart":"true","test":5}}</component> </project>

No es exactamente lo que quería. ¿Dónde está mi problema?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Probé su caso con xml2js y obtuve el mismo error.

Lo arreglé usando otro paquete xml2j-cdata Esta es mi nueva prueba y funciona de la manera que usted quiere. Espero poder ayudarte https://codesandbox.io/s/xml2js-cdata-test-hu39jw?file=/src/index.js https://www.npmjs.com/package/xml2js-cdata

about 4 years ago · Juan Pablo Isaza Relatório

0

Podría resolverlo insertando un valor ficticio que obligue a la biblioteca a usar CDATA . Creé un valor ficticio que contiene un carácter ( < ) que activará el paquete para usar CDATA:

 const path = require('path'); const fs = require('fs-extra'); const xml2js = require('xml2js'); const xmlFilePath = path.join(__dirname, './resource.xml'); const xmlFileDestPath = path.join(__dirname, './resource-new.xml'); (async () => { const xmlContent = await fs.readFile(xmlFilePath, 'utf-8').catch(() => ''); const parsedXml = await xml2js.parseStringPromise(xmlContent); const objectToAppend = parsedXml['project']['component'][0]['_']; const parsedObject = JSON.parse(objectToAppend); const parsedKeyToString = parsedObject['keyToString']; const newObject = { ...parsedKeyToString, test: '<xxx>' }; parsedXml['project']['component'][0]['_'] = JSON.stringify({ keyToString: newObject }); const builder = new xml2js.Builder({ xmldec: { version: '1.0', encoding: 'UTF-8' }, cdata: true, }); const workspaceXmlFileContent = builder.buildObject(parsedXml); await fs.writeFile(xmlFileDestPath, workspaceXmlFileContent); })();
about 4 years ago · Juan Pablo Isaza Relatório

0

Creo que es mejor intentarlo de esta manera:

 xml = `<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="PropertiesComponent"><![CDATA[{ "keyToString": { "RunOnceActivity.OpenProjectViewOnStart": "true" } }]]></component> </project> ` //parse the xml domdoc = new DOMParser().parseFromString(xml, "text/xml") //locate the right element result = domdoc.evaluate('//component', domdoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); //extract the CDATA let target = result.snapshotItem(0).childNodes[0].textContent //parse the content into JSON jobj = JSON.parse(target) //create a new entry newentry = { ...jobj.keyToString, "Test": 5}; //modify the JSON object jobj.keyToString=newentry //insert the modified entry into the JSON and stringify it result.snapshotItem(0).childNodes[0].textContent=JSON.stringify(jobj); console.log(domdoc.querySelector('project').outerHTML)

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda