主题
比较元素 - XmlCompareElements
函数简介
比较两个元素是否相同(比较名称、属性和文本内容)。
接口名称
XmlCompareElementsDLL调用
c
int32_t XmlCompareElements(int64_t element1, int64_t element2, int32_t deep, int32_t* err);参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| element1 | 长整数型 | 第一个元素句柄。 |
| element2 | 长整数型 | 第二个元素句柄。 |
| deep | 整数型 | 是否深度比较(包括所有子元素)。 |
| err | 整数型 | 错误码输出参数,可为 NULL。见 XML 错误码说明。 |
示例
SDK 调用
cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
// 假设 xmlStr 来自 HTTP 响应、配置文件或文件读取
const char* xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>";
int32_t err = 0;
int64_t doc = ola.XmlParse(xmlStr, &err);
if (doc != 0 && err == 0) {
int32_t rootErr = 0;
int64_t root = ola.XmlGetRootElement(doc, &rootErr);
int32_t findErr = 0;
int64_t user = ola.XmlFindElement(root, "user", &findErr);
int32_t cloneErr = 0;
int64_t cloned = ola.XmlCloneElement(doc, user, &cloneErr);
int32_t cmpErr = 0;
int32_t same = ola.XmlCompareElements(user, cloned, 1, &cmpErr);
ola.XmlFree(doc);
}csharp
using OLAPlug;
var ola = new OLAPlugServer();
// 假设 xmlStr 来自 HTTP 响应、配置文件或文件读取
string xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>";
int err;
long doc = ola.XmlParse(xmlStr, out err);
if (doc != 0 && err == 0)
{
int rootErr;
long root = ola.XmlGetRootElement(doc, out rootErr);
int findErr;
long user = ola.XmlFindElement(root, "user", out findErr);
int cloneErr, cmpErr;
long cloned = ola.XmlCloneElement(doc, user, out cloneErr);
int same = ola.XmlCompareElements(user, cloned, 1, out cmpErr);
ola.XmlFree(doc);
}python
from OLAPlugServer import OLAPlugServer
ola = OLAPlugServer()
# 假设 xml_str 来自 HTTP 响应、配置文件或文件读取
xml_str = '<root><user id="1" enabled="true" level="10"><name>ola</name><role>admin</role></user></root>'
doc, err = ola.XmlParse(xml_str)
if doc != 0 and err == 0:
root, root_err = ola.XmlGetRootElement(doc)
user, find_err = ola.XmlFindElement(root, "user")
cloned, clone_err = ola.XmlCloneElement(doc, user)
same, cmp_err = ola.XmlCompareElements(user, cloned, 1)
ola.XmlFree(doc)java
import com.olaplug.OLAPlugServer;
import com.sun.jna.ptr.IntByReference;
OLAPlugServer ola = new OLAPlugServer();
// 假设 xmlStr 来自 HTTP 响应、配置文件或文件读取
String xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>";
IntByReference err = new IntByReference(0);
long doc = com.olaplug.OLAPlugDLLHelper.XmlParse(xmlStr, err);
if (doc != 0 && err.getValue() == 0) {
IntByReference rootErr = new IntByReference(0);
long root = com.olaplug.OLAPlugDLLHelper.XmlGetRootElement(doc, rootErr);
IntByReference findErr = new IntByReference(0);
long user = com.olaplug.OLAPlugDLLHelper.XmlFindElement(root, "user", findErr);
IntByReference cmpErr = new IntByReference(0);
ola.XmlFree(doc);
}go
import "github.com/ola/olaplug/olaplug"
ola, _ := olaplug.NewOLAPlugServer("OLAPlug_x64.dll")
defer ola.ReleaseObj()
// 假设 xmlStr 来自 HTTP 响应、配置文件或文件读取
xmlStr := "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>"
var err int32
doc := ola.XmlParse(xmlStr, &err)
if doc != 0 && err == 0 {
var rootErr int32
root := ola.XmlGetRootElement(doc, &rootErr)
var findErr int32
user := ola.XmlFindElement(root, "user", &findErr)
var cloneErr int32
cloned := ola.XmlCloneElement(doc, user, &cloneErr)
var cmpErr int32
same := ola.XmlCompareElements(user, cloned, 1, &cmpErr)
ola.XmlFree(doc)
}rust
use olaplug::OLAPlugServer;
let ola = OLAPlugServer::new("OLAPlug_x64.dll").unwrap();
// 假设 xmlStr 来自 HTTP 响应、配置文件或文件读取
let xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>";
let mut err: i32 = 0;
let doc = ola.xml_parse(&xmlStr, &mut err as *mut i32);
if doc != 0 && err == 0 {
let mut rootErr: i32 = 0;
let root = ola.xml_get_root_element(doc, &mut rootErr as *mut i32);
let mut findErr: i32 = 0;
let user = ola.xml_find_element(root, "user", &mut findErr as *mut i32);
let mut cloneErr: i32 = 0;
let cloned = ola.xml_clone_element(doc, user, &mut cloneErr as *mut i32);
let mut cmpErr: i32 = 0;
let same = ola.xml_compare_elements(user, &cloned, 1, &mut cmpErr as *mut i32);
ola.xml_free(doc);
}cpp
var ola = com("OlaPlug.OlaSoft")
// 假设 xmlStr 来自配置文件等
var xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>"
var err = 0
var doc = ola.XmlParse(xmlStr, err)
if(doc && err == 0) {
var rootErr = 0
var root = ola.XmlGetRootElement(doc, rootErr)
var findErr = 0
var user = ola.XmlFindElement(root, "user", findErr)
var cloneErr = 0
var cloned = ola.XmlCloneElement(doc, user, cloneErr)
var cmpErr = 0
var same = ola.XmlCompareElements(user, cloned, 1, cmpErr)
ola.XmlFree(doc)
}vbscript
Set ola = CreateObject("OlaPlug.OlaSoft")
' 假设 xmlStr 来自配置文件等
xmlStr = "<root><user id=""1"" enabled=""true"" level=""10""><name>ola</name><role>admin</role></user></root>"
err = 0
doc = ola.XmlParse(xmlStr, err)
If doc <> 0 And err = 0 Then
rootErr = 0
root = ola.XmlGetRootElement(doc, rootErr)
findErr = 0
user = ola.XmlFindElement(root, "user", findErr)
cloneErr = 0
cloned = ola.XmlCloneElement(doc, user, cloneErr)
cmpErr = 0
same = ola.XmlCompareElements(user, cloned, 1, cmpErr)
ola.XmlFree(doc)
End Iftext
.局部变量 ola, OLAPlug
ola.创建 ()
' 假设 xmlStr 来自配置文件等
xmlStr = “<root><user id=“1“ enabled=“true“ level=“10“><name>ola</name><role>admin</role></user></root>“
err = 0
doc = ola.XmlParse (xmlStr, err)
.如果真 (doc ≠ 0 且 err = 0)
rootErr = 0
root = ola.XmlGetRootElement (doc, rootErr)
findErr = 0
user = ola.XmlFindElement (root, "user", findErr)
cloneErr = 0
cloned = ola.XmlCloneElement (doc, user, cloneErr)
cmpErr = 0
same = ola.XmlCompareElements (user, cloned, 1, cmpErr)
ola.XmlFree (doc)
.如果真结束aardio
import OLAPlugServer;
var ola = OLAPlugServer();
// 假设 xmlStr 来自配置文件等
var xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>";
var err = 0;
var doc = ola.XmlParse(xmlStr, err);
if(doc && !err){
var rootErr = 0;
var root = ola.XmlGetRootElement(doc, rootErr);
var findErr = 0;
var user = ola.XmlFindElement(root, "user", findErr);
var cloneErr = 0, cmpErr = 0;
var cloned = ola.XmlCloneElement(doc, user, cloneErr);
var same = ola.XmlCompareElements(user, cloned, 1, cmpErr);
ola.XmlFree(doc);
}text
变量 ola <类型 = OLAPlugServer>
ola = 新建 OLAPlugServer
// 假设 xmlStr 来自配置文件等
文本型 xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>"
整数 err = 0
长整数 doc = ola.XmlParse(xmlStr, err)
如果真 (doc ≠ 0 且 err = 0)
{
整数 rootErr = 0
长整数 root = ola.XmlGetRootElement(doc, rootErr)
整数 findErr = 0
长整数 user = ola.XmlFindElement(root, "user", findErr)
整数 cloneErr = 0, cmpErr = 0
长整数 cloned = ola.XmlCloneElement(doc, user, cloneErr)
整数 same = ola.XmlCompareElements(user, cloned, 1, cmpErr)
ola.XmlFree(doc)
}cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
// 假设 xmlStr 来自 HTTP 响应、配置文件或文件读取
const char* xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>";
int32_t err = 0;
int64_t doc = ola.XmlParse(xmlStr, &err);
if (doc != 0 && err == 0) {
int32_t rootErr = 0;
int64_t root = ola.XmlGetRootElement(doc, &rootErr);
int32_t findErr = 0;
int64_t user = ola.XmlFindElement(root, "user", &findErr);
int32_t cloneErr = 0;
int64_t cloned = ola.XmlCloneElement(doc, user, &cloneErr);
int32_t cmpErr = 0;
int32_t same = ola.XmlCompareElements(user, cloned, 1, &cmpErr);
ola.XmlFree(doc);
}原生 DLL 调用
cpp
long instance = CreateCOLAPlugInterFace();
const char* xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>";
int err = 0;
long doc = XmlParse(instance, xmlStr, &err);
if (doc != 0 && err == 0) {
int rootErr = 0;
long root = XmlGetRootElement(instance, doc, &rootErr);
int findErr = 0;
long user = XmlFindElement(instance, root, "user", &findErr);
int cmpErr = 0;
int same = XmlCompareElements(instance, user, cloned, 1, &cmpErr);
XmlFree(instance, doc);
}csharp
using System.Runtime.InteropServices;
using System.Text;
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long CreateCOLAPlugInterFace();
long instance = CreateCOLAPlugInterFace();
string xmlStr = "<root><user id=\"1\" enabled=\"true\" level=\"10\"><name>ola</name><role>admin</role></user></root>";
int err = 0;
long doc = XmlParse(instance, xmlStr, err);
if (doc != 0 && err == 0)
{
int rootErr = 0;
long root = XmlGetRootElement(instance, doc, rootErr);
int findErr = 0;
long user = XmlFindElement(instance, root, "user", findErr);
int cmpErr = 0;
int same = XmlCompareElements(instance, user, cloned, 1, &cmpErr);
XmlFree(instance, doc);
}python
from ctypes import CDLL, c_int, c_int64, create_string_buffer
ola = CDLL("OLAPlug_x64.dll")
ola.CreateCOLAPlugInterFace.restype = c_int64
instance = ola.CreateCOLAPlugInterFace()
xml_str = b'<root><user id="1" enabled="true" level="10"><name>ola</name><role>admin</role></user></root>'
err = c_int(0)
doc = ola.XmlParse(instance, xml_str, err)
if doc and err.value == 0:
root_err = c_int(0)
root = ola.XmlGetRootElement(instance, doc, root_err)
find_err = c_int(0)
user = ola.XmlFindElement(instance, root, b"user", find_err)
int cmpErr = 0;
int same = XmlCompareElements(instance, user, cloned, 1, &cmpErr);
ola.XmlFree(instance, doc)返回值
错误码含义见 XML 错误码说明。
| 返回值 | 说明 |
|---|---|
1 | 相同。 |
0 | 不同。 |
注意事项
| 项目 | 说明 |
|---|---|
| deep=0 时只比较当前元素的名称、属性和文本 | deep=0 时只比较当前元素的名称、属性和文本。 |
| deep=1 时递归比较所有子元素 | deep=1 时递归比较所有子元素。 |
| 属性顺序不影响比较结果 | 属性顺序不影响比较结果。 |
