NaturalIntelligence / fast-xml-parser

Validate XML, Parse XML and Build XML rapidly without C/C++ based libraries and no callback.
https://naturalintelligence.github.io/fast-xml-parser/
MIT License
2.43k stars 297 forks source link

Difficulty treating some numeric tags as string #646

Open chris-gilbert-2 opened 4 months ago

chris-gilbert-2 commented 4 months ago

Description

I have an input structure where some numeric values are to be treated as strings. Rather than calling toString in multiple places in my code, I hoped to use the parsing options, but looking at the codebase I think it is not currently possible using either numberOptions or tagValueProcessor.

### Input ```xml 132330 191458 1500 ```

Code

  const options = {
   tagValueProcessor: (tagName: string, tagValue: unknown) =>
      tagName === "id" ? `${tagValue}` : tagValue,
  };
  const parsed =  new XMLParser(options).parse(input);

Output

{
  '?xml': '',
  root: {
    id: 132330,
    nested: { 
      id: 191458, 
      count: 1500 
    } 
  }
}

expected data

{
  '?xml': '',
  root: {
    id: '132330',
    nested: { 
      id: '191458', 
      count: 1500 
    } 
  }
}

I see why there is no conversion - the input type is string and so is the output type, so when the tagValueProcessor is applied, parsing is not skipped.

I can't use the skipLike property of numberParseOptions because strnum only receives the value without the tag name for context. I can't safely use a regex to differentiate IDs from other numbers.

I can't use the parseTagValue option because that is a universal setting that can't be applied to specific tags.

I think the simplest (backward compatible) approach that would work for me, would be another option like parseTagValue, but which takes a function with the same inputs as tagValueProcessor or isArray, and returns boolean, so that enabling parsing can be finer grained.

Would you like to work on this issue?

Bookmark this repository for further updates. Visit SoloThought to know about recent features.

github-actions[bot] commented 4 months ago

We're glad you find this project helpful. We'll try to address this issue ASAP. You can vist https://solothought.com to know recent features. Don't forget to star this repo.

amitguptagwl commented 3 months ago

You can also try v5 experimental changes. But no detail tutorial is available currently. You can follow this guideline.