У меня есть 2 xsd схемы, которые мне нужно объединить
F.E.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="UserType">
<xs:sequence>
<xs:element type="xs:string" name="Field1"/>
<xs:element type="xs:string" name="Field6"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="UserType">
<xsd:sequence>
<xsd:element type="xsd:string" name="Field1"/>
<xsd:element type="xsd:string" name="Field2"/>
<xsd:element type="xsd:string" name="Field3"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Я пытаюсь объединить и написать следующий код, который объединит 2 xsd файла в один и напечатает результат.
$DOMChild = new \DOMDocument;
$DOMChild->loadXML($child);
$node = $DOMChild->documentElement;
$DOMParent = new \DOMDocument;
$DOMParent->formatOutput = true;
$DOMParent->loadXML($parent);
$node = $DOMParent->importNode($node, true);
if ($tag !== null) {
$tag = $DOMParent->getElementsByTagName($tag)->item(0);
$tag->appendChild($node);
} else {
$DOMParent->documentElement->appendChild($node);
}
echo $DOMParent->saveXML();
Результат этого следующий:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="UserType">
<xs:sequence>
<xs:element type="xs:string" name="Field1"/>
<xs:element type="xs:string" name="Field6"/>
</xs:sequence>
</xs:complexType>
<xs:schema>
<xs:complexType name="UserType">
<xs:sequence>
<xsd:element type="xsd:string" name="Field1"/>
<xsd:element type="xsd:string" name="Field2"/>
<xsd:element type="xsd:string" name="Field3"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</xs:schema>
Мне не нужно разбирать дочерний файл на родительский узел, но я не знаю, как его можно удалить из файла результатов.
Может ли кто-нибудь помочь мне ?! Спасибо
Кажется, я нашел решение
$first = new \DOMDocument("1.0", 'UTF-8');
$first->formatOutput = true;
$first->loadXML($parent);
$second = new \DOMDocument("1.0", 'UTF-8');
$second->formatOutput = true;
$second->loadXML($child);
$second = $second->documentElement;
foreach($second->childNodes as $node)
{
$importNode = $first->importNode($node,TRUE);
$first->documentElement->appendChild($importNode);
}
echo $first->saveXML();
Других решений пока нет …