0
我有一個xml的多級節點。 我可以找到節點,但需要知道如何更新節點值。 在我的文件中,我可以通過它的屬性找到節點通道,但是如何更新像channelType或其他節點的值?更新XML所有子節點值按PHP中的屬性進行搜索
這是我的代碼XML文件我做了什麼。
<?xml version="1.0"?>
<systemConfigs>
<systemConfig cnfId="1">
<moduleName>Module 1</moduleName>
<channeles ch="1">
<chId>1</chId>
<channelName>Channel 1 of Module 1</channelName>
<channelType>myFunc 1</channelType>
<channelFunc>conFig</channelFunc>
<eu>myFunc 1</eu>
<custScale>myFunc 1</custScale>
<rawMin>myFunc 1</rawMin>
<rawMax>myFunc 1</rawMax>
<euMin>myFunc 1</euMin>
<euMax>myFunc 1</euMax>
<dspFormat>myFunc 1</dspFormat>
<digOfPrec>myFunc 1</digOfPrec>
</channeles>
<channeles ch="2">
<chId>2</chId>
<channelName>Channel 2 of Module 1</channelName>
<channelType>myFunc 2</channelType>
<channelFunc>conFig</channelFunc>
<eu>myFunc 2</eu>
<custScale>myFunc 2</custScale>
<rawMin>myFunc 2</rawMin>
<rawMax>myFunc 2</rawMax>
<euMin>myFunc 2</euMin>
<euMax>myFunc 2</euMax>
<dspFormat>myFunc 2</dspFormat>
<digOfPrec>myFunc 2</digOfPrec>
</channeles>
</systemConfig>
<systemConfig cnfId="2">
<moduleName>Module 2</moduleName>
<channeles ch="3">
<chId>3</chId>
<channelName>Channel 1 of Module 2</channelName>
<channelType>myFunc 1</channelType>
<channelFunc>conFig</channelFunc>
<eu>myFunc 1</eu>
<custScale>myFunc 1</custScale>
<rawMin>myFunc 1</rawMin>
<rawMax>myFunc 1</rawMax>
<euMin>myFunc 1</euMin>
<euMax>myFunc 1</euMax>
<dspFormat>myFunc 1</dspFormat>
<digOfPrec>myFunc 1</digOfPrec>
</channeles>
<channeles ch="4">
<chId>4</chId>
<channelName>Channel 2 of Module 2</channelName>
<channelType>myFunc 2</channelType>
<channelFunc>conFig</channelFunc>
<eu>myFunc 2</eu>
<custScale>myFunc 2</custScale>
<rawMin>myFunc 2</rawMin>
<rawMax>myFunc 2</rawMax>
<euMin>myFunc 2</euMin>
<euMax>myFunc 2</euMax>
<dspFormat>myFunc 2</dspFormat>
<digOfPrec>myFunc 2</digOfPrec>
</channeles>
</systemConfig>
</systemConfigs>
現在我想更新子節點的值,其中通道CH = 4
其中僅更新與屬性CH = 4節點渠道後,將與這樣的新值被保存。
<channeles ch="4">
<chId>4</chId>
<channelName>Channel New Name</channelName>
<channelType>New Channel Type</channelType>
<channelFunc>New Func</channelFunc>
<eu>New Eu</eu>
<custScale>New Cust Scale</custScale>
<rawMin>1</rawMin>
<rawMax>10</rawMax>
<euMin>1</euMin>
<euMax>10</euMax>
<dspFormat>scintific</dspFormat>
<digOfPrec>10</digOfPrec>
</channeles>
我可以找到像這樣的節點。
$doc = new DOMDocument();
$doc->load(BASEPATH.'data/sysConf.xml');
$selector = new DOMXPath($doc);
$query = '//channeles[@ch="4"]/*';
$list = $selector->query($query);
$node = $list->item(0);
$module = $node->parentNode->getElementsByTagName("channelName");
$channelName = $module->item(0)->nodeValue;
$module = $node->parentNode->getElementsByTagName("channelType");
$channelType = $module->item(0)->nodeValue;
請幫我看一段代碼。我如何更新我的XML節點與所有孩子?
在此先感謝您的幫助。
我得到錯誤,使用simplexml_load_file(FileName.xml)和錯誤指向行$ sxe = new SimpleXMLElement($ xml);說:「開始標記預期','''' – Sonnet 2013-04-25 01:37:24
我得到錯誤,在使用您的代碼後,錯誤指向行$ sxe = new SimpleXMLElement($ xml);說:「開始標籤預期,'''」請幫助。 – Sonnet 2013-04-25 01:50:06
你確定你複製+粘貼了我的代碼嗎?看到它在這裏工作http://codepad.org/gjHpclps。 順便說一句,你能告訴我,當你在那行之前回顯$ xml變量時會出現什麼? SimpleXMLElement構造函數需要一個有效的XML字符串作爲第一個參數,也許你傳遞的值不是。 – 2013-04-25 09:07:14