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 回答