通过XML遍历
问题描述:
XML:通过XML遍历
<?xml version="1.0" encoding="utf-8"?>
<NConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<NDomain>ex1</NDomain>
<Parameters>
<version>p</version>
<siteFolder>site1</siteFolder>
<cssGeneral></cssGeneral>
<cssLogin>l.css</cssLogin>
</Parameters>
<Database>
<hostname>898</hostname>
<username>j</username>
<password>k</password>
<name>n</name>
</Database>
<NDomain>ex2</NDomain>
<Parameters>
<version>p</version>
<siteFolder>site1</siteFolder>
<cssGeneral></cssGeneral>
<cssLogin>l.css</cssLogin>
</Parameters>
<Database>
<hostname>898</hostname>
<username>j</username>
<password>k</password>
<name>n</name>
</Database>
</NConfig>
我想问下Ex1到所有节点itterate
到目前为止,我可以这样直接访问节点:
$xmldata = simplexml_load_file("config.xml");
foreach($xmldata->Parameters as $item)
{
echo "<p>Version: " . $item->version . "</p>";
echo "<p>Site Folder: " . $item->siteFolder . "</p>";
}
但是这并不会使它成为特定的根节点,而是会遍历列表中的所有参数。我怎样才能做到这一点?
答
如果您<Parameters>
和<Database>
为相应<NDomain>
是specfic,我更喜欢你应该有UR XML模式是这样的:
<NDomain>
<name>ex1</name>
<Parameters>
<version>p</version>
<siteFolder>site1</siteFolder>
<cssGeneral></cssGeneral>
<cssLogin>l.css</cssLogin>
</Parameters>
<Database>
<hostname>898</hostname>
<username>j</username>
<password>k</password>
<name>n</name>
</Database>
</NDomain>
<NDomain>
<name>ex2</name>
<Parameters>
<version>p</version>
<siteFolder>site1</siteFolder>
<cssGeneral></cssGeneral>
<cssLogin>l.css</cssLogin>
</Parameters>
<Database>
<hostname>898</hostname>
<username>j</username>
<password>k</password>
<name>n</name>
</Database>
</NDomain>
所以,你可以分析如下:
foreach($xmldata->NDomain as $item)
{
$par = $item->Parameters;
echo "<p>Version: " . $par->version . "</p>";
echo "<p>Site Folder: " . $par->siteFolder . "</p>";
}
答
你可以只遍历根节点的孩子,像这样:
$first = true;
foreach($xmldata->children() as $item)
{
if($first === true) {
$first = false;
continue;
}
}
该循环就会赶上<NDomain>
,<Parameters>
和<Database>
,所以你需要一个简单的检查,以跳过第一次迭代省略<NDomain>
。
可以请你详细阐述“根节点特定”? – Makesh 2012-07-25 12:16:56
刚刚编辑它 - 以便你有特定的参数节点属于它们各自的根节点: ex2 etc等 –
thejoker
2012-07-25 12:42:05