PeculiarVentures / xml-core

xml-core is a set of classes that make it easier to work with XML within the browser and node.
MIT License
19 stars 11 forks source link

How to insert data inside a tag with attributes without inserting the child element #32

Open tshaji opened 1 year ago

tshaji commented 1 year ago

Hi Team, We have a requirement wherein we need to have an attribute inside a tag and that tag should include a string, but without any child elements. The result should look something similar to below.

I0VYVC1YLUtFWTpNRVRIT0Q9U0FNUExFLUFFUyxLRVlJRD0weDEwMDAwMDAwMTAwMDEwMDAxMDAwMTAwMDAwMDAwMDAxLFVSST0iZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxBQUFBUFhCemMyZ0FBQUFBN2UrTHFYbldTczZqeUNmYzFSMGg3UUFBQUIwYURYZHBaR1YyYVc1bFgzUmxjM1FpREhSbGMzUWdZMjl1ZEdWdWRBPT0iLEtFWUZPUk1BVD0idXJuOnV1aWQ6ZWRlZjhiYTktNzlkNi00YWNlLWEzYzgtMjdkY2Q1MWQyMWVkIixLRVlGT1JNQVRWRVJTSU9OUz0iMSI= I0VYVC1YLVNFU1NJT04tS0VZOk1FVEhPRD1TQU1QTEUtQUVTLFVSST0iZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxBQUFBUFhCemMyZ0FBQUFBN2UrTHFYbldTczZqeUNmYzFSMGg3UUFBQUIwYURYZHBaR1YyYVc1bFgzUmxjM1FpREhSbGMzUWdZMjl1ZEdWdWRBPT0iLEtFWUZPUk1BVD0idXJuOnV1aWQ6ZWRlZjhiYTktNzlkNi00YWNlLWEzYzgtMjdkY2Q1MWQyMWVkIixLRVlGT1JNQVRWRVJTSU9OUz0iMSI=

`We have the below code

@XmlElement({ localName: 'HLSSignalingData', prefix: CPIX_NS }) export class HLSSignalingData extends XmlObject { @XmlAttribute({ localName: 'playlist' }) public playlist?: string;

@XmlChildElement({})
public hls?: string;

} @XmlElement({ localName: 'DRMSystem', namespaceURI: CPIX_NS_URI, prefix: CPIX_NS }) export class DRMSystem extends XmlObject { @XmlChildElement({ localName: 'HLSSignalingData', prefix: CPIX_NS, parser: HLSSignalingData }) public hLSSignalingData?: HLSSignalingData; } ` Below is what we are getting right now with the above code snippet.

I0VYVC1YLVNFU1NJT04tS0VZOk1FVEhPRD1TQU1QTEUtQUVTLFVSST0iZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxBQUFBUFhCemMyZ0FBQUFBN2UrTHFYbldTczZqeUNmYzFSMGg3UUFBQUIwYURYZHBaR1YyYVc1bFgzUmxjM1FpREhSbGMzUWdZMjl1ZEdWdWRBPT0iLEtFWUZPUk1BVD0idXJuOnV1aWQ6ZWRlZjhiYTktNzlkNi00YWNlLWEzYzgtMjdkY2Q1MWQyMWVkIixLRVlGT1JNQVRWRVJTSU9OUz0iMSI=

Is it possible to include data inside a tag with attributes without inserting the child element. In this case the additional tag added is

microshine commented 1 year ago

Your script doesn't have any XML example you need to get. I took example from this link https://docs.unified-streaming.com/documentation/drm/cpix_signaling_behaviour.html

Here is my code

@XmlElement({
    localName: "HLSSignalingData"
})
class HLSSignalingData extends XmlObject {

    @XmlAttribute({
        localName: "playlist"
    })
    public Playlist: string;

    @XmlContent({
        converter: {
            get: (v: string) => Buffer.from(v).toString("base64"),
            set: (v: string) => Buffer.from(v, "base64").toString(),
        }
    })
    public Content: string;
}

const data = new HLSSignalingData();
data.Playlist = "media";
data.Content = `#EXT-X-KEY:METHOD=SAMPLE-AES,KEYID=0x10000000100010001000100000000001,URI="data:text/plain;base64,AAAAPXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB0aDXdpZGV2aW5lX3Rlc3QiDHRlc3QgY29udGVudA==",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSIONS="1"`;

console.log(data.toString());

// <HLSSignalingData playlist="media">I0VYVC1YLUtFWTpNRVRIT0Q9U0FNUExFLUFFUyxLRVlJRD0weDEwMDAwMDAwMTAwMDEwMDAxMDAwMTAwMDAwMDAwMDAxLFVSST0iZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxBQUFBUFhCemMyZ0FBQUFBN2UrTHFYbldTczZqeUNmYzFSMGg3UUFBQUIwYURYZHBaR1YyYVc1bFgzUmxjM1FpREhSbGMzUWdZMjl1ZEdWdWRBPT0iLEtFWUZPUk1BVD0idXJuOnV1aWQ6ZWRlZjhiYTktNzlkNi00YWNlLWEzYzgtMjdkY2Q1MWQyMWVkIixLRVlGT1JNQVRWRVJTSU9OUz0iMSI=</HLSSignalingData>
tshaji commented 1 year ago

Hello Miroshin Stepan, I appreciate your reply. It solved our problem.