0

重複の可能性:
PHP を使用して xml ファイルを変更する方法

次のようなxmlがあります。

<host host-name="www.1.com">
   <root-directory>c:/public_html</root-directory>
</host>
<host host-name="www.2.com">
   <root-directory>c:/public_html</root-directory>
</host>

このようにphpを使用してxmlを変更する必要があります

ホスト名の値 = www.2.com の場合

c:/public_html/blahblah の root-directory の値を変更します

したがって、最終結果は次のようになります。

<host host-name="www.1.com">
   <root-directory>c:/public_html</root-directory>
</host>
<host host-name="www.2.com">
   <root-directory>c:/public_html/blahblah</root-directory>
</host>

私は本当に助けが必要です。ありがとう!

アップデート:

ああ、私はプログラマーではないことを忘れていました。とにかく、これが私が試したことです

$xmlDomain= "www.2.com";
$nomefile='myfile.xml';
$xmlDoc = new DomDocument();
$xmlDoc->load($nomefile); 
$Xroot = $xmlDoc->documentElement;
$products = $Xroot->getElementsByTagName("host");
$length = $products->length;
for ($i=$length-1;$i>=0;$i--)
{
$p = $products->item($i);    
$pid = $p->getAttribute("host-name");

if ($pid == $xmlDomain)
{  
$parent = $xmlDoc->getElementsByTagName("root-directory");     
$parent->nodeValue = 'c:/public_html/blahblah';             
}
}
$strxml = $xmlDoc->saveXML();
$handle = fopen($nomefile, "w");
fwrite($handle, $strxml);
fclose($handle);
4

1 に答える 1

0

さて、私はドキュメントを書くことから少し頭を離す必要があったので、ここにそれがあります:

function modifyRootDirectoryFormHosts(DOMDocument $doc, $hostNameToLookFor, $newRootDirectory)
{
    $xpath = new DOMXPath($doc);
    $items = $xpath->query(sprintf('//host[@host-name="%s"]', $hostNameToLookFor));

    if (count($items) > 0)
    {
        foreach($items as $item)
        {
            foreach($item->getElementsByTagName('root-directory') as $rootDirElement)
            {
                $rootDirElement->removeChild($rootDirElement->firstChild);
                $rootDirElement->appendChild($doc->createTextNode($newRootDirectory));
            }
        }
    }
}

$xmlSource = <<<XML
<root>
<host host-name="www.1.com">
   <root-directory>c:/public_html</root-directory>
</host>
<host host-name="www.2.com">
   <root-directory>c:/public_html</root-directory>
</host>
</root>
XML;


$doc = new DOMDocument();
$doc->loadXML($xmlSource);

modifyRootDirectoryFormHosts($doc, 'www.2.com', 'c:/public_html/blahblah');

echo $doc->saveXML();

出力は次のとおりです。

<?xml version="1.0"?>
<root>
<host host-name="www.1.com">
   <root-directory>c:/public_html</root-directory>
</host>
<host host-name="www.2.com">
   <root-directory>c:/public_html/blahblah</root-directory>
</host>
</root>
于 2012-09-12T14:13:25.103 に答える