2012-02-07 108 views
1

我有一个关于用php读取xml文件的问题。 我有一个样本PHP文件:在php中读取xml文件

///file.xml

<appender name="app1"> 
     <param name="param1"></param> 
</appender> 

现在我想帕拉姆名称的值。我有这个代码。

function getURL($aURL){ 

$objDOM = new DOMDocument(); 

////the file.xml  
$objDOM->load($aURL); 
$note = $objDOM->getElementsByTagName("appender"); 

foreach ($note as $value) { 
    ///First try 
    $name = $value->getElementsByTagName("name")->firstChild->nodeValue; 

    ///Second try 
    ///$logName = $value->getElementsByTagName("name"); 
    ///$name = $logName->item(0)->nodeValue; 

} 

}

我的第一个和第二次尝试都返回空。不给 “app1”值。

有人可以帮助我吗?

谢谢。

+0

*(相关)* [noob问题有关DOM文档(http://stackoverflow.com/questions/4979836/noob-question-about-domdocument-in-php/4983721#4983721) – Gordon 2012-02-07 09:00:05

+0

[如何使用PHP的DOM解析器从XML中提取节点属性](http://stackoverflow.com/questions/3993302/how-to-extract-a-node-attribute-from- xml-using-phps-dom-parser) – Gordon 2012-02-07 09:00:43

回答

2

标签的名称是PARAM和的名字属性是名称

$name = $value->getElementsByTagName("param")->firstChild->getAttribute('name')->nodeValue; 
+0

谢谢@Secator但但它似乎不起作用:(给我这个“DOMElement类的对象无法转换为字符串”错误 – tinks 2012-02-07 10:00:35

+0

尝试增加' - > nodeValue'在 – 2012-02-07 10:49:49

1

名字是不是一个元素,它的附加器元件的属性

$name = $value->getElementsByTagName("param")->firstChild->getAttribute("name"); 

编辑

$data = '<appender name="app1"> 
    <param name="param1"></param> 
    <param name="param2"></param> 
</appender>'; 

$objDOM = new DOMDocument(); 
$objDOM->loadXML($data); 

$appenders = $objDOM->getElementsByTagName("appender"); 

foreach ($appenders as $appender) { 
    $params = $appender->getElementsByTagName("param"); 
    foreach($params as $param) { 
     $name = $param->getAttribute("name"); 
     var_dump($name); 
     break; 
    } 
} 
+0

谢谢@Mark Ba​​ker – tinks 2012-02-07 09:27:28

+0

谢谢@Mark Ba​​ker。但它似乎不起作用:(给我这个“类DOMElement的对象无法转换为字符串”错误 – tinks 2012-02-07 10:00:14

0

nodeValue真的是空的。根据<param name="param1"></param>,您没有指定一个。改用getAttribute方法。

1

@Tinks用“的SimpleXML”它有点更容易阅读的价值。

<?php 
    $xmlString = '<appender name="app1"> 
     <param name="param1" value="2">123</param> 
     <param name="param2" value="3">345</param> 
</appender>'; 

$xml = new SimpleXMLElement($xmlString); 

foreach($xml->param as $out) { 
    echo $out['name']." "; 
    echo $out['value']."<br />"; 
} 
?> 

这里是一个简单的例子,如何读取一个XML文件。

+0

,因为我的XML是一种不同的文件末尾..这就是为什么我需要加载它.. – tinks 2012-02-07 10:04:22

+0

而是因为我需要首先加载文件,因为它是一个不同的xml文件@Stony – tinks 2012-02-07 10:05:59

+0

然后使用file_get_contents('file.xml')来获取内容 new SimpleXMLElement(file_get_contents('file.xml')); – Stony 2012-02-07 14:03:54

-1

这里是做什么:

Load the XML file 
Get the name of the first element 
Create a loop that will trigger on each child node, using the children() function 
Output the element name and data for each child node