diff --git a/sdk/core/core-xml/CHANGELOG.md b/sdk/core/core-xml/CHANGELOG.md index 343a4018190c..d8ae4d302be6 100644 --- a/sdk/core/core-xml/CHANGELOG.md +++ b/sdk/core/core-xml/CHANGELOG.md @@ -4,6 +4,7 @@ ### Other Changes +- Fix root version node handling difference with fxp v3. [#20035](https://github.com/Azure/azure-sdk-for-js/pull/20035) - Upgrade to `fast-xml-parser` to v4 [PR# 19898](https://github.com/Azure/azure-sdk-for-js/pull/19898) ## 1.1.0 (2022-01-06) diff --git a/sdk/core/core-xml/src/xml.ts b/sdk/core/core-xml/src/xml.ts index b50fb3dd89d9..f54e182daf54 100644 --- a/sdk/core/core-xml/src/xml.ts +++ b/sdk/core/core-xml/src/xml.ts @@ -68,6 +68,12 @@ export async function parseXML(str: string, opts: XmlOptions = {}): Promise const parser = new XMLParser(getParserOptions(opts)); const parsedXml = parser.parse(unescapeHTML(str)); + // Remove the node. + // This is a change in behavior on fxp v4. Issue #424 + if (parsedXml["?xml"]) { + delete parsedXml["?xml"]; + } + if (!opts.includeRoot) { for (const key of Object.keys(parsedXml)) { const value = parsedXml[key]; diff --git a/sdk/core/core-xml/test/xml.spec.ts b/sdk/core/core-xml/test/xml.spec.ts index edfc3f22e077..4fd57c30f9c4 100644 --- a/sdk/core/core-xml/test/xml.spec.ts +++ b/sdk/core/core-xml/test/xml.spec.ts @@ -511,6 +511,35 @@ describe("XML serializer", function () { }); }); + it("should parse xml with root element", async () => { + const str = `nullemptypartialrfull2021-07-08T09:10:09.0000000Z2021-07-08T09:10:09.0000000Zr`; + const parsed = await parseXML(str); + assert.deepEqual(parsed, { + SignedIdentifier: [ + { + Id: "null", + }, + { + Id: "empty", + }, + { + AccessPolicy: { + Permission: "r", + }, + Id: "partial", + }, + { + AccessPolicy: { + Expiry: "2021-07-08T09:10:09.0000000Z", + Permission: "r", + Start: "2021-07-08T09:10:09.0000000Z", + }, + Id: "full", + }, + ], + }); + }); + it("should handle urlEncoded content", async () => { const input = `https://daschulttest1.servicebus.windows.net/testQueuePath/?api-version=2017-04&enrich=FalsetestQueuePath2018-10-09T19:56:34Z2018-10-09T19:56:35Zdaschulttest1PT1M1024falsefalseP14DfalsePT10M10true00falseActive2018-10-09T19:56:34.903Z2018-10-09T19:56:35.013Z0001-01-01T00:00:00Ztrue00000P10675199DT2H48M5.4775807SfalseAvailablefalse`; const parsed = await parseXML(input);