Как загрузить схему, установить свойства и вывести строку без SDO?

После борьбы с установкой SDO на сервер я обнаружил некоторую информацию о том, что SDO не будет дальше развиваться / поддерживаться.

Как это можно сделать без SDO?

$das = SDO_DAS_XML::create("$someSchemaFile");
$doc = $das->createDocument();
$root = $doc->getRootDataObject();
$root->Data1 = 'data1';
$root->Data2 = 'data2';
$string = $das->saveString($doc);

Схема (псевдо)

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:cc="http://cc/XMLSchema">
    <xsd:element name="SomeName">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Data1" type="xsd:string"/>
                <xsd:element name="Data2" type="xsd:string"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

1 ответ

Решение

XSD - это сам XML, поэтому у вас есть несколько способов сделать это, например, DomDocument. Но самый простой способ, вероятно, будет SimpleXML, он не такой мощный, но в большинстве случаев вам это не нужно.

Вот небольшой пример:

$xml = <<<XML <?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:cc="http://cc/XMLSchema">
    <xsd:element name="SomeName">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Data1" type="xsd:string"/>
                <xsd:element name="Data2" type="xsd:string"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element> </xsd:schema> 
XML;

$doc = simplexml_load_string($xml);

// get the first xsd:element node with a name-attribute of 'Data1' 
$element = $doc->xpath("//xsd:element[@name='Data1']")[0];

// change the name-attribute: 
$element->attributes()->name = 'SomeOtherName';

// or even add another attribute: 
$element->addAttribute('newAttribute', 'newAttributeValue');

// and spit it out as XML again:
echo $doc->asXML();

Я надеюсь, что это поможет, так как я не совсем уверен, что это то, что вы имели в виду. Но насколько я понял ваш вопрос, вы просто ищете альтернативный / простой способ манипулировать файлом XML.

Другие вопросы по тегам