Files
midi-php/extend/AliPayV2/alipay-sdk/aopV2/schema/XMLAttribute.php

342 lines
13 KiB
PHP
Raw Normal View History

2025-08-13 10:43:56 +08:00
<?php
class XMLAttribute
{
private $id;
private $name;
private $type;
private $valueType;
private $rules;
private $options;
private $values;
public function checkAttributeValueType($attributeValueType)
{
$valueTypeArr = array(
"text" => "文本类型",
"boolean" => "boolean类型",
"numeric" => "数据类型",
"enum" => "枚举型",
"object" => "对象型"
);
if (empty($attributeValueType)) return false;
// foreach ($valueTypeArr as $key => $value){
// if($attributeValueType === $key) return true;
// }
if (array_key_exists($attributeValueType, $valueTypeArr)) return true;
return false;
}
/**
* @throws Exception
*/
public function toElement($dom, $parent)
{
$this->checkAttribute();
if ("single" === $this->type || "multi" === $this->type) {
$attributeElm = $this->appendAttributeValues($dom, $parent, $this);
$this->appendRulesElement($dom, $attributeElm, $this->rules, $this->id);
$this->appendOptionsElement($dom, $attributeElm, $this->options, $this->id);
} elseif ("complex" === $this->type) {
$attributeElm = $dom->createElement("attribute");
$attributeElm->setAttribute("id", $this->id);
$attributeElm->setAttribute("type", $this->type);
if ($this->name != "" && !is_null($this->name)) {
$attributeElm->setAttribute("name", $this->name);
}
if ($this->checkAttributeValueType($this->valueType)) {
$attributeElm->setAttribute("valueType", $this->valueType);
}
$attributesElm = $dom->createElement("attributes");
if (is_array($this->values)) {
foreach ($this->values as $attribute) {
if ($attribute instanceof XMLAttribute) {
$attributeElmTmp = $this->appendAttributeValues($dom, $attributesElm, $attribute);
$this->appendRulesElement($dom, $attributeElmTmp, $attribute->rules, $attribute->id);
$this->appendOptionsElement($dom, $attributeElmTmp, $attribute->options, $attribute->id);
}
}
} elseif (!empty($this->values)) {//complex类型的values必须是数组 或 空
throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
}
$attributeElm->appendChild($attributesElm);
$this->appendRulesElement($dom, $attributeElm, $this->rules, $this->id);
$parent->appendChild($attributeElm);
} elseif ("multiComplex" === $this->type) {
$attributeElm = $dom->createElement("attribute");
$attributeElm->setAttribute("id", $this->id);
if ($this->name != "" && !is_null($this->name)) {
$attributeElm->setAttribute("name", $this->name);
}
$attributeElm->setAttribute("type", $this->type);
$attributeElm->setAttribute("valueType", "object");
if (is_array($this->values)) {
foreach ($this->values as $complexAttribute) {
if ($complexAttribute instanceof XMLAttribute) {
$attributesElm = $dom->createElement("attributes");
if (is_array($complexAttribute->getValues())) {
foreach ($complexAttribute->getValues() as $attribute) {
if ($attribute instanceof XMLAttribute) {
if (!$this->checkAttributeValueType($attribute->getValueType())) {
throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性valueType不正确!");
}
$attributeElmTmp = $this->appendAttributeValues($dom, $attributesElm, $attribute);
$this->appendRulesElement($dom, $attributeElmTmp, $attribute->rules, $attribute->id);
$this->appendOptionsElement($dom, $attributeElmTmp, $attribute->options, $attribute->id);
}
}
} elseif (!empty($complexAttribute->getValues())) {//complex类型的values必须是数组 或 空
throw new \Exception("id=[" . $complexAttribute->getId() . "] XMLAttribute属性values不合法!");
}
$attributeElm->appendChild($attributesElm);
}
}
} elseif (!empty($this->values)) {//multiComplex类型的values必须是数组 或 空
throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
}
$parent->appendChild($attributeElm);
} else {
throw new \Exception("id=[" . $this->id . "] XMLAttribute属性type类型不正确!");
}
}
/**
* @throws Exception
*/
public function toValueElement($dom, $parent)
{
$this->checkAttribute();
if ("single" === $this->type || "multi" === $this->type) {
$this->appendAttributeValues($dom, $parent, $this);
} elseif ("complex" === $this->type) {
$attributeElm = $dom->createElement("attribute");
$attributeElm->setAttribute("id", $this->id);
$attributeElm->setAttribute("type", $this->type);
if ($this->name != "" && !is_null($this->name)) {
$attributeElm->setAttribute("name", $this->name);
}
if ($this->checkAttributeValueType($this->valueType)) {
$attributeElm->setAttribute("valueType", $this->valueType);
}
$attributesElm = $dom->createElement("attributes");
if (is_array($this->values)) {
foreach ($this->values as $attribute) {
if ($attribute instanceof XMLAttribute) {
$this->appendAttributeValues($dom, $attributesElm, $attribute);
}
}
} elseif (!empty($this->values)) {//complex类型的values必须是数组 或 空
throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
}
$attributeElm->appendChild($attributesElm);
$parent->appendChild($attributeElm);
} elseif ("multiComplex" === $this->type) {
$attributeElm = $dom->createElement("attribute");
$attributeElm->setAttribute("id", $this->id);
if ($this->name != "" && !is_null($this->name)) {
$attributeElm->setAttribute("name", $this->name);
}
$attributeElm->setAttribute("type", $this->type);
$attributeElm->setAttribute("valueType", "object");
if (is_array($this->values)) {
foreach ($this->values as $complexAttribute) {
if ($complexAttribute instanceof XMLAttribute) {
$attributesElm = $dom->createElement("attributes");
if (is_array($complexAttribute->getValues())) {
foreach ($complexAttribute->getValues() as $attribute) {
if ($attribute instanceof XMLAttribute) {
if (!$this->checkAttributeValueType($attribute->getValueType())) {
throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性valueType不正确!");
}
$this->appendAttributeValues($dom, $attributesElm, $attribute);
}
}
} elseif (!empty($complexAttribute->getValues())) {//complex类型的values必须是数组 或 空
throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
}
$attributeElm->appendChild($attributesElm);
}
}
} elseif (!empty($this->values)) {//multiComplex类型的values必须是数组 或 空
throw new \Exception("id=[" . $this->id . "] XMLAttribute属性values不合法!");
}
$parent->appendChild($attributeElm);
} else {
throw new \Exception("id=[" . $this->id . "] XMLAttribute属性type类型不正确!");
}
}
/**
* @throws Exception
*/
protected function appendAttributeValues($dom, $parent, $attribute)
{
$attributeElm = $dom->createElement("attribute");
if ($attribute->getId() != "" && !is_null($attribute->getId())) {
$attributeElm->setAttribute("id", $attribute->getId());
}
if ($attribute->getName() != "" && !is_null($attribute->getName())) {
$attributeElm->setAttribute("name", $attribute->getName());
}
if ($attribute->getType() != "" && !is_null($attribute->getType())) {
$attributeElm->setAttribute("type", $attribute->getType());
}
if ($this->checkAttributeValueType($attribute->getValueType())) {
$attributeElm->setAttribute("valueType", $attribute->getValueType());
}
$values = $attribute->getValues();
if ("single" === $attribute->getType()) {
$valueElm = $dom->createElement("value");
if (is_string($values)) {
$text = $dom->createTextNode($values);
$valueElm->appendChild($text);
} elseif (!is_null($values)) {//single类型的values必须是字符串 或 空
throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性values不合法!");
}
$attributeElm->appendChild($valueElm);
$parent->appendChild($attributeElm);
} elseif ("multi" === $attribute->getType()) {
$valuesElm = $dom->createElement("values");
if (is_array($values)) {
foreach ($values as $value) {
if (is_string($value) || is_null($value)) {
$valueElm = $dom->createElement("value", $value);
$valuesElm->appendChild($valueElm);
}
}
} elseif (!empty($values)) {//multi类型的values必须是数组 或 空
throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性values不合法!");
}
$attributeElm->appendChild($valuesElm);
$parent->appendChild($attributeElm);
} else {
throw new \Exception("id=[" . $attribute->getId() . "] XMLAttribute属性type类型不正确!");
}
return $attributeElm;
}
/**
* @throws Exception
*/
protected function appendRulesElement($dom, $parent, $rules, $attributeId)
{
if (empty($rules)) return;
if (!is_array($rules)) {
throw new \Exception("id=[" . $attributeId . "] XMLAttribute属性rules不合法!");
}
$rulesElm = $dom->createElement("rules");
foreach ($rules as $rule) {
if ($rule instanceof AttributeRule) {
$rule->toElement($dom, $rulesElm, $attributeId);
}
}
$parent->appendChild($rulesElm);
}
/**
* @throws Exception
*/
protected function appendOptionsElement($dom, $parent, $options, $attributeId)
{
if (empty($options)) return;
if (!is_array($options)) {
throw new \Exception("id=[" . $attributeId . "] XMLAttribute属性options不合法!");
}
$optionsElm = $dom->createElement("options");
foreach ($options as $option) {
if ($option instanceof Option) {
$option->toElement($dom, $optionsElm, $attributeId);
}
}
$parent->appendChild($optionsElm);
}
/**
* @throws Exception
*/
protected function checkAttribute()
{
if (empty($this->id) && $this->id != '0') {
throw new \Exception("XMLAttribute属性缺少id!");
}
if (empty($this->type) && $this->type != '0') {
throw new \Exception("id=[" . $this->id . "] XMLAttribute属性缺少type");
}
}
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
public function getType()
{
return $this->type;
}
public function setType($type)
{
$this->type = $type;
}
public function getValueType()
{
return $this->valueType;
}
public function setValueType($valueType)
{
$this->valueType = $valueType;
}
public function getRules()
{
return $this->rules;
}
public function setRules($rules)
{
$this->rules = $rules;
}
public function getOptions()
{
return $this->options;
}
public function setOptions($options)
{
$this->options = $options;
}
public function getValues()
{
return $this->values;
}
public function setValues($values)
{
$this->values = $values;
}
}