0

既存の XML ファイルがあり、PhP を使用してその中の特定のフィールドを変更したいと考えています。たとえば、id と pw を変更したいとします。特定のフィールドを開いて書き込む方法に関するヘルプはありますか?

        <info>
            <contact:info xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0
contact-1.0.xsd">
                <contact:id>reg_contact001</contact:id>
                <contact:authInfo>
                    <contact:pw>my-password</contact:pw>
                </contact:authInfo>
            </contact:info>
        </info> 
4

1 に答える 1

1
$xml = <<<XML
    <info>
        <contact:info xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd">
            <contact:id>reg_contact001</contact:id>
            <contact:authInfo>
                <contact:pw>my-password</contact:pw>
            </contact:authInfo>
        </contact:info>
    </info>
XML;

function changeXML ($xml, $params) {
    // prepare xml object
    $xmlObj = new SimpleXMLElement($xml);
    $namespaces = $xmlObj->getNameSpaces(true);
    $entry = $xmlObj->children($namespaces['contact']);

    // change data
    $entry->info->id = $params->id;
    $entry->info->authInfo->pw = $params->pw;

    return '<info>' . $entry->saveXML() . '</info>';
}

print_r($xml);

$params = new \stdClass();
$params->id = 1;
$params->pw = 'supercowpowers';

$result = changeXML($xml, $params);

print_r($result);

出力

<info>
    <contact:info xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd">
        <contact:id>reg_contact001</contact:id>
        <contact:authInfo>
            <contact:pw>my-password</contact:pw>
        </contact:authInfo>
    </contact:info>
</info>

<info>
    <contact:info xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd">
        <contact:id>1</contact:id>
        <contact:authInfo>
            <contact:pw>supercowpowers</contact:pw>
        </contact:authInfo>
    </contact:info>
</info>
于 2013-08-26T07:58:18.227 に答える