这是XML文件:
<?xml version="1.0" encoding="gb2312"?>
<Classes>
<Class>
<ClassID>1</ClassID>
<ClassName>建筑钢材</ClassName>
<ClassEnglishName>gangcai</ClassEnglishName>
<ParentID>0</ParentID>
</Class>
<Class>
<ClassID>2</ClassID>
<ClassName>特钢</ClassName>
<ClassEnglishName>tegang</ClassEnglishName>
<ParentID>0</ParentID>
</Class>
<Class>
<ClassID>3</ClassID>
<ClassName>螺纹钢</ClassName>
<ClassEnglishName>luowengang</ClassEnglishName>
<ParentID>1</ParentID>
</Class>
<Class>
<ClassID>4</ClassID>
<ClassName>型钢</ClassName>
<ClassEnglishName>xinggang</ClassEnglishName>
<ParentID>0</ParentID>
</Class>
</Classes>
这是PHP代码:
public function view($obj)
{
$doc = new DOMDocument();
$doc->load("database/class.xml");
$xpath = new DOMXPath($doc);
$classes = $xpath-> evaluate( "/Classes/Class[ClassID='" . $obj->ClassID . "']");
//print_r($classes->item(0)-> nodeValue);
//$x = $classes->item(0)-> nodeValue;
//$arr = (array)$x;
//print_r($arr);
foreach( $classes as $class )
{
$obj->ClassName = $xpath-> evaluate( 'ClassName ', $class)-> item(0)-> nodeValue;
$obj->ClassName = iconv ( "utf-8", "gb2312", $obj->ClassName );
$obj->ClassEnglishName = $xpath-> evaluate( 'ClassEnglishName ', $class)-> item(0)-> nodeValue;
$obj->ParentID = $xpath-> evaluate( 'ParentID ', $class)-> item(0)-> nodeValue;
}
return($obj);
}
相信您肯定会看到我用了foreach循环,是不是感到很奇怪?
因为我不知道怎么直接获取子节点的值,刚好网上有例子,所以就拿过来用了。
虽然说可以实现功能,但是这太不理想了。
注释部分是我试图想直接获取的代码,但是都不行。所以发上来,请大家帮我看下,万分感谢!
<?xml version="1.0" encoding="gb2312"?>
<Classes>
<Class>
<ClassID>1</ClassID>
<ClassName>建筑钢材</ClassName>
<ClassEnglishName>gangcai</ClassEnglishName>
<ParentID>0</ParentID>
</Class>
<Class>
<ClassID>2</ClassID>
<ClassName>特钢</ClassName>
<ClassEnglishName>tegang</ClassEnglishName>
<ParentID>0</ParentID>
</Class>
<Class>
<ClassID>3</ClassID>
<ClassName>螺纹钢</ClassName>
<ClassEnglishName>luowengang</ClassEnglishName>
<ParentID>1</ParentID>
</Class>
<Class>
<ClassID>4</ClassID>
<ClassName>型钢</ClassName>
<ClassEnglishName>xinggang</ClassEnglishName>
<ParentID>0</ParentID>
</Class>
</Classes>
这是PHP代码:
public function view($obj)
{
$doc = new DOMDocument();
$doc->load("database/class.xml");
$xpath = new DOMXPath($doc);
$classes = $xpath-> evaluate( "/Classes/Class[ClassID='" . $obj->ClassID . "']");
//print_r($classes->item(0)-> nodeValue);
//$x = $classes->item(0)-> nodeValue;
//$arr = (array)$x;
//print_r($arr);
foreach( $classes as $class )
{
$obj->ClassName = $xpath-> evaluate( 'ClassName ', $class)-> item(0)-> nodeValue;
$obj->ClassName = iconv ( "utf-8", "gb2312", $obj->ClassName );
$obj->ClassEnglishName = $xpath-> evaluate( 'ClassEnglishName ', $class)-> item(0)-> nodeValue;
$obj->ParentID = $xpath-> evaluate( 'ParentID ', $class)-> item(0)-> nodeValue;
}
return($obj);
}
相信您肯定会看到我用了foreach循环,是不是感到很奇怪?
因为我不知道怎么直接获取子节点的值,刚好网上有例子,所以就拿过来用了。
虽然说可以实现功能,但是这太不理想了。
注释部分是我试图想直接获取的代码,但是都不行。所以发上来,请大家帮我看下,万分感谢!
print_r($xml); //输出 XML,就可以看到所有节点值了。
nodeValue获取到的是节点本身,类型是obj,不是字串,不能直接显示的,所以要再加一个saveXML转为字串代码不写了,你上面的改改就行另外,如果运行不畅的话,建议改用DOMXPath::query
evaluate返回的类型是不定的,写xpath时要保持清晰的头脑
query返回的是nodelist,不合要求的xpath会返回empty list,类型单一点,但容易查错