Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Self closing tags fail with stopNodes. #470

Closed
5 of 7 tasks
OmarOmeiri opened this issue Jul 5, 2022 · 1 comment
Closed
5 of 7 tasks

Self closing tags fail with stopNodes. #470

OmarOmeiri opened this issue Jul 5, 2022 · 1 comment
Labels
Pending Pending to be confirmed by user/author for some check/update/implementation

Comments

@OmarOmeiri
Copy link

  • Are you running the latest version?
  • Have you included sample input, output, error, and expected output?
  • Have you checked if you are using correct configuration?
  • Did you try online tool?

Description

The XMLParser fails when stopNode is an empty (self-closing) tag.
If I remove the problematic tag, everything works fine.

Input

<?xml version="1.0"?>
<ArrayOfControleAcionarioAcionista xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ControleAcionarioAcionista>
    <ControlesAcionariosAcionistasFilhos>
      <ControleAcionarioAcionista>
        <ControlesAcionariosPreferenciais>
          <ControleAcionarioPreferencial>
            <CodigoClasseAcaoPreferencial>0</CodigoClasseAcaoPreferencial>
            <QuantidadeAcao>0</QuantidadeAcao>
            <PercentualAcao>0.000000</PercentualAcao>
          </ControleAcionarioPreferencial>
        </ControlesAcionariosPreferenciais>
        <ControlesAcionariosAcionistasFilhos>
          <ControleAcionarioAcionista>
            <ControlesAcionariosPreferenciais />
            <ControlesAcionariosAcionistasFilhos>
              <ControleAcionarioAcionista>
                <ControlesAcionariosPreferenciais />
                <ControlesAcionariosAcionistasFilhos /><!-- This is the problematic tag -->
                <Nivel>0</Nivel>
              </ControleAcionarioAcionista>
            </ControlesAcionariosAcionistasFilhos>
            <Nivel>0</Nivel>
          </ControleAcionarioAcionista>
        </ControlesAcionariosAcionistasFilhos>
        <Nivel>0</Nivel>
      </ControleAcionarioAcionista>
    </ControlesAcionariosAcionistasFilhos>
    <Nivel>0</Nivel>
  </ControleAcionarioAcionista>
</ArrayOfControleAcionarioAcionista>

Code

import { X2jOptionsOptional, XMLParser } from 'fast-xml-parser';
import { readFile, writeFile } from 'fs/promises';

const PATH = `${__dirname}/ControleAcionario.xml`;

const ignoreTags = [
  /ControlesAcionariosAcionistasFilhos/i,
];

/**
 * I have also tried with:
 * ArrayOfControleAcionarioAcionista.ControleAcionarioAcionista.ControlesAcionariosAcionistasFilhos
 */
const stopNodes = [
  '*.ControlesAcionariosAcionistasFilhos',
];

const tagValueProcessor = (tagName: string, tagValue: string, jPath: string) => {
  if (ignoreTags.some((re) => re.test(jPath))) return '';
  return tagValue;
};

const options: X2jOptionsOptional = {
  tagValueProcessor,
  trimValues: true,
  stopNodes,
};

(async () => {
  const parser = new XMLParser(options);
  const xml = (await readFile(PATH)).toString();
  const json = JSON.stringify(parser.parse(xml), null, 2);
  await writeFile(`${__dirname}/test.json`, json);
})();

Output

.../node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js:299
            if(!result) throw new Error(`Unexpected end of ${tagName}`);
                              ^
Error: Unexpected end of ControlesAcionariosAcionistasFilhos
    at OrderedObjParser.parseXml (.../node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js:299:31)
    at XMLParser.parse (.../node_modules/fast-xml-parser/src/xmlparser/XMLParser.js:35:48)
    at .../playground/xmlparse/xmlparse.ts:32:38

expected data

{
  "?xml": "",
  "ArrayOfControleAcionarioAcionista": {
    "ControleAcionarioAcionista": {
      "ControlesAcionariosAcionistasFilhos": "",
      "Nivel": 0
    }
  }
}

Would you like to work on this issue?

  • Yes
  • No
  • Maybe, if not too time-consuming

Bookmark this repository for further updates.

@github-actions
Copy link

github-actions bot commented Jul 5, 2022

I'm glad you find this repository helpful. I'll try to address your issue ASAP. You can watch the repo for new changes or star it.

@amitguptagwl amitguptagwl added the Pending Pending to be confirmed by user/author for some check/update/implementation label Jul 6, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Pending Pending to be confirmed by user/author for some check/update/implementation
Projects
None yet
Development

No branches or pull requests

2 participants