This commit is contained in:
Giovanni 2024-11-17 01:45:19 +08:00 committed by GitHub
commit 492f93549b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 64 additions and 20 deletions

View File

@ -74,20 +74,22 @@ function:
fclose(fp); fclose(fp);
.fi .fi
.PP .PP
The "mxmlLoadString()", "mxmlSaveAllocString()", and The "mxmlLoadString()", "mxmlLoadBuffer()", "mxmlSaveAllocString()", and
"mxmlSaveString()" functions load XML node trees from and save "mxmlSaveString()" functions load XML node trees from and save
XML node trees to strings: XML node trees to strings:
.nf .nf
char buffer[8192]; const char *input;
char output[8192];
char *ptr; char *ptr;
mxml_options_t *options;
mxml_node_t *tree; mxml_node_t *tree;
... ...
tree = mxmlLoadString(NULL, buffer, MXML_NO_CALLBACK); tree = mxmlLoadString(NULL, options, input);
... ...
mxmlSaveString(tree, buffer, sizeof(buffer), mxmlSaveString(tree, output, sizeof(output),
MXML_NO_CALLBACK); MXML_NO_CALLBACK);
... ...
@ -841,6 +843,26 @@ MUST be well-formed with a single parent processing instruction node like
Load options are provides via the \fBoptions\fR argument. If \fBNULL\fR, all values Load options are provides via the \fBoptions\fR argument. If \fBNULL\fR, all values
will be loaded into \fBMXML_TYPE_TEXT\fR nodes. Use the \fImxmlOptionsNew\fR will be loaded into \fBMXML_TYPE_TEXT\fR nodes. Use the \fImxmlOptionsNew\fR
function to create options when loading XML data. function to create options when loading XML data.
.SS mxmlLoadString
Load a string into an XML node tree.
.PP
.nf
mxml_node_t * mxmlLoadBuffer (
mxml_node_t *top,
mxml_options_t *options,
const char *buffer,
size_t buflen
);
.fi
.PP
This function loads up to buflen bytes from the buffer into an XML node tree.
The nodes in the specified file are added to the specified node \fBtop\fR - if
\fBNULL\fR the XML file MUST be well-formed with a single parent processing
instruction node like \fB<?xml version="1.0"?>\fR at the start of the file.
.PP
Load options are provides via the \fBoptions\fR argument. If \fBNULL\fR, all values
will be loaded into \fBMXML_TYPE_TEXT\fR nodes. Use the \fImxmlOptionsNew\fR
function to create options when loading XML data.
.SS mxmlNewCDATA .SS mxmlNewCDATA
Create a new CDATA node. Create a new CDATA node.
.PP .PP

View File

@ -206,6 +206,42 @@ mxmlLoadIO(
} }
//
// 'mxmlLoadBuffer()' - Load a buffer into an XML node tree.
//
// This function loads up to buflen bytes from the buffer into an XML node tree.
// The nodes in the specified file are added to the specified node `top` - if
// `NULL` the XML file MUST be well-formed with a single parent processing
// instruction node like `<?xml version="1.0"?>` at the start of the file.
//
// Load options are provides via the `options` argument. If `NULL`, all values
// will be loaded into `MXML_TYPE_TEXT` nodes. Use the @link mxmlOptionsNew@
// function to create options when loading XML data.
//
mxml_node_t * // O - First node or `NULL` if the string has errors.
mxmlLoadBuffer(
mxml_node_t *top, // I - Top node
mxml_options_t *options, // I - Options
const char *buffer, // I - Buffer to load
size_t buflen) // I - Buffer to load
{
_mxml_stringbuf_t sb; // String buffer
// Range check input...
if (!buffer || !buflen)
return (NULL);
// Setup string buffer...
sb.buffer = (char *)buffer;
sb.bufptr = (char *)buffer;
sb.bufsize = buflen;
sb.bufalloc = false;
// Read the XML data...
return (mxml_load_data(top, options, (mxml_io_cb_t)mxml_read_cb_string, &sb));
}
// //
// 'mxmlLoadString()' - Load a string into an XML node tree. // 'mxmlLoadString()' - Load a string into an XML node tree.
// //
@ -225,24 +261,9 @@ mxmlLoadString(
mxml_options_t *options, // I - Options mxml_options_t *options, // I - Options
const char *s) // I - String to load const char *s) // I - String to load
{ {
_mxml_stringbuf_t sb; // String buffer return mxmlLoadBuffer(top, options, s, s ? strlen(s) : 0);
// Range check input...
if (!s)
return (NULL);
// Setup string buffer...
sb.buffer = (char *)s;
sb.bufptr = (char *)s;
sb.bufsize = strlen(s);
sb.bufalloc = false;
// Read the XML data...
return (mxml_load_data(top, options, (mxml_io_cb_t)mxml_read_cb_string, &sb));
} }
// //
// 'mxmlSaveAllocString()' - Save an XML tree to an allocated string. // 'mxmlSaveAllocString()' - Save an XML tree to an allocated string.
// //

1
mxml.h
View File

@ -180,6 +180,7 @@ extern mxml_node_t *mxmlLoadFile(mxml_node_t *top, mxml_options_t *options, FILE
extern mxml_node_t *mxmlLoadFilename(mxml_node_t *top, mxml_options_t *options, const char *filename); extern mxml_node_t *mxmlLoadFilename(mxml_node_t *top, mxml_options_t *options, const char *filename);
extern mxml_node_t *mxmlLoadIO(mxml_node_t *top, mxml_options_t *options, mxml_io_cb_t io_cb, void *io_cbdata); extern mxml_node_t *mxmlLoadIO(mxml_node_t *top, mxml_options_t *options, mxml_io_cb_t io_cb, void *io_cbdata);
extern mxml_node_t *mxmlLoadString(mxml_node_t *top, mxml_options_t *options, const char *s); extern mxml_node_t *mxmlLoadString(mxml_node_t *top, mxml_options_t *options, const char *s);
extern mxml_node_t *mxmlLoadBuffer(mxml_node_t *top, mxml_options_t *options, const char *buffer, size_t buflen);
extern void mxmlOptionsDelete(mxml_options_t *options); extern void mxmlOptionsDelete(mxml_options_t *options);
extern mxml_options_t *mxmlOptionsNew(void); extern mxml_options_t *mxmlOptionsNew(void);