Не удается сохранить в файл XML с использованием domXML - PullRequest
0 голосов
/ 15 марта 2012

Я пытался создать метод добавления новых элементов в XML-файл, но по какой-то причине он не изменяет элемент, даже если при использовании saveXML выводятся правильные.

function fnDOMEditElementCond($product_id, $name, $weight, $category, $location) {

        if (!isset($product_id) || is_numeric($product_id)) {
          return false;
      }
        $obj = new helperClass();
        $xmlDoc = $obj->fetchFromXMLDocument('storage.xml');
        $xpath = new DOMXPath($xmlDoc);

        $result = $xpath->query(sprintf('/storagehouse/item[@id="%s"]', $product_id));
        if (!$result || $result->length !== 1) {
            throw new Exception(sprintf('Item with id "%s" does not exists or is not unique.', $product_id));
        }
        $item = $result->item(0);
       //Change the name element
        $xName = $xpath->query("./name", $item)->item(0);
        $xName->removeChild($xName);

//        //Change the name element
//        $xWeight = $xpath->query("./weight", $item)->item(0);
//        $xWeight->nodeValue = $weight;
//        
//        //Change the name element
//        $xLocation = $xpath->query("./location", $item)->item(0);
//        $xLocation->nodeValue = $category;
//        
//        //Change the name element
//        $xCategory = $xpath->query("./category", $item)->item(0);
//        $xCategory->nodeValue = $location;








        echo $xmlDoc->saveXML($item);
    }

}

Этот код принимает идентификатор и в зависимости от идентификатора изменяет информацию на четырех элементах.

Вот XML-файл

storagehouse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="schema.xsd">
    <item id="c7278e33ef0f4aff88da10dfeeaaae7a">
        <name>HDMI Cable 3m</name>
        <weight>0.5</weight>
        <category>Cables</category>
        <location>B3</location>
    </item>
    <item id="df799fb47bc1e13f3e1c8b04ebd16a96">
        <name>Dell U2410</name>
        <weight>2.5</weight>
        <category>Monitors</category>
        <location>C2</location>
    </item>
    <item id="53abbd89766ea8759b5ebe5bacd43f58">
        <name>HP Probook 1311</name>
        <weight>2.1</weight>
        <category>Notebooks</category>
        <location>A1</location>
    </item>
<storagehouse/>

У вас есть идеи, почему это может не сработать?

1 Ответ

0 голосов
/ 15 марта 2012

Я полагаю, это потому, что вы ищете save (), а не savexml ().И вам нужно будет дать save () имя файла.

Редактировать: Кроме того, если я правильно помню, вам нужно будет перезагрузить DOM после каждого сохранения, в противном случае вы будете воздействовать только на несохраненные элементы DOM.Но прошло много времени с тех пор, как я должен был это сделать.Я дважды проверю свой старый код.

Снова отредактирую: я просматривал свой код, и он действительно необходим.Вы можете сделать все необходимые изменения одновременно, но если вам нужно просмотреть результаты в промежуточный период, вы должны либо сгенерировать их с помощью saveXML (), либо save () и прочитать их в новый объект XML.Оригинальный объект будет отражать только оригинальное содержание.Я не заметил этого должным образом в своих комментариях, как должен был, но мой код сделан таким образом, что заставляет меня думать, что я прав.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...