2011-04-27 87 views
1

XML新手,不知道我在做什么。我需要一个很好解释,简单的方法来做到这一点。通过id解析XML解析

从以前的页面我使用的查询字符串获得一个ID呢?例如:test.php的ID = AT

我需要显示他们选择在部门内的所有员工姓名。下面是我的XML文档的一个片段。

<SOT> 
    <DEPARTMENT name="Aviation Technology" id="AT"> 
     <EMPLOYEE type="Faculty"> 
      <LOGIN>bdbowen</LOGIN> 
      <PASSWORD>bdbowen</PASSWORD> 
      <NAME>John J. Doe</NAME> 
      <IMAGE>images/faculty/bdbown.jpg</IMAGE> 
      <OFFICE>Knoy</OFFICE> 
      <PHONE>765.494.2884</PHONE> 
      <EMAIL>[email protected]</EMAIL> 
     </EMPLOYEE> 
     <EMPLOYEE type="Faculty"> 
      <LOGIN>bdbowen</LOGIN> 
      <PASSWORD>bdbowen</PASSWORD> 
      <NAME>Jill J. Doe</NAME> 
      <IMAGE>images/faculty/bdbown.jpg</IMAGE> 
      <OFFICE>Knoy</OFFICE> 
      <PHONE>765.494.2884</PHONE> 
      <EMAIL>[email protected]</EMAIL> 
     </EMPLOYEE> 
    </DEPARTMENT> 
    <DEPARTMENT name="Mechanical Engineering Technology" id="MET"> 
     <EMPLOYEE type="Faculty"> 
      <LOGIN>bdbowen</LOGIN> 
      <PASSWORD>bdbowen</PASSWORD> 
      <NAME>John J. Doe</NAME> 
      <IMAGE>images/faculty/bdbown.jpg</IMAGE> 
      <OFFICE>Knoy</OFFICE> 
      <PHONE>765.494.2884</PHONE> 
      <EMAIL>[email protected]</EMAIL> 
     </EMPLOYEE> 
    </DEPARTMENT> 
</SOT> 

举例来说,如果他们选择使用GET在AT ID拉链接,我想在页面上显示如下:

约翰·J·多伊
吉尔J. Doe

再次,我不知道我在这里做什么,所以anyhelp将不胜感激。


我试过下面的代码,但它只显示每个部门的名字。任何想法如何推荐它显示一个部门内的所有名称?

<script type="text/javascript"> 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.open("GET","faculty1.xml",false); 
xmlhttp.send(); 
xmlDoc=xmlhttp.responseXML; 

document.write("<table border='1'>"); 
var x=xmlDoc.getElementsByTagName("DEPARTMENT"); 
for (i=0;i<x.length;i++) 
    { 
    document.write("<tr><td>"); 
    document.write(x[i].getElementsByTagName("NAME")[0].childNodes[0].nodeValue); 
    document.write("</td></tr>"); 
    } 
document.write("</table>"); 
</script> 
+0

向我们展示您的任何代码以帮助您 – TOUDIdel 2011-04-27 05:56:15

+0

可能的重复[如何使用PHP的DOM解析器从XML中提取节点属性](http://stackoverflow.com/questions/3993302/how-to-extract- a-node-attribute-from-xml-using-phps-dom-parser) – Gordon 2011-04-27 06:49:19

+0

[getElementsByTagName with specific attribute]的可能重复(http://stackoverflow.com/questions/4224286/php-getelementsbytagname-with-specific-attribute/4224309#4224309) – Gordon 2011-04-27 06:50:12

回答

1

您可以使用XPath表达式:

参见:https://github.com/homer6/altumo/blob/master/source/php/Xml/XmlElement.md

$xml = <<<XML 
<SOT> 
    <DEPARTMENT name="Aviation Technology" id="AT"> 
     <EMPLOYEE type="Faculty"> 
      <LOGIN>bdbowen</LOGIN> 
      <PASSWORD>bdbowen</PASSWORD> 
      <NAME>John J. Doe</NAME> 
      <IMAGE>images/faculty/bdbown.jpg</IMAGE> 
      <OFFICE>Knoy</OFFICE> 
      <PHONE>765.494.2884</PHONE> 
      <EMAIL>[email protected]</EMAIL> 
     </EMPLOYEE> 
     <EMPLOYEE type="Faculty"> 
      <LOGIN>bdbowen</LOGIN> 
      <PASSWORD>bdbowen</PASSWORD> 
      <NAME>Jill J. Doe</NAME> 
      <IMAGE>images/faculty/bdbown.jpg</IMAGE> 
      <OFFICE>Knoy</OFFICE> 
      <PHONE>765.494.2884</PHONE> 
      <EMAIL>[email protected]</EMAIL> 
     </EMPLOYEE> 
    </DEPARTMENT> 
    <DEPARTMENT name="Mechanical Engineering Technology" id="MET"> 
     <EMPLOYEE type="Faculty"> 
      <LOGIN>bdbowen</LOGIN> 
      <PASSWORD>bdbowen</PASSWORD> 
      <NAME>John J. Doe</NAME> 
      <IMAGE>images/faculty/bdbown.jpg</IMAGE> 
      <OFFICE>Knoy</OFFICE> 
      <PHONE>765.494.2884</PHONE> 
      <EMAIL>[email protected]</EMAIL> 
     </EMPLOYEE> 
    </DEPARTMENT> 
</SOT> 
XML; 

$xml_element = new \Altumo\Xml\XmlElement($xml); 
$results = $xml_element->queryWithXpath('DEPARTMENT[@id="AT"]/EMPLOYEE/NAME'); 
var_dump($results); 


array(2) { 
    [0]=> 
    string(11) "John J. Doe" 
    [1]=> 
    string(11) "Jill J. Doe" 
} 
+0

这只是吐出一切为我我需要它只显示部门的雇员 – 2011-04-27 13:40:48

+0

我只需要发明时间旅行。不要轻易做到这一点 – trickwallett 2011-04-27 13:59:44

1

编辑:从Gordon有的一些提示后,这里是我编辑的代码:

$xmlObject = smplexml_load_file("staff.xml"); 
$id = $_GET["id"]; 
$employees = null; 

foreach($xmlObject as $key => $value){ 
    $attributes = $xmlObject[0]->DEPARTMENT->attributes(); 
    if($attributes["id"] == $id){ 
     $employees = $xmlObject[0]->DEPARTMENT->EMPLOYEE; 
     break; 
    } 
} 

foreach($employees as $key => $value){ 
    print $value->NAME . "\n"; 
} 

基本上你会得到AL雇员在$ employees变量中可以遍历并按照你所说的方式检索名称。

+0

1-没有解释我做错了什么。在教别人错误的事情之前,请熟悉建设性的反馈。 – rzetterberg 2011-04-27 14:41:38

+0

我不是想成为一个混蛋,我只是想在这里证明一个观点。如果你告诉我我做错了什么,或者指出了正确的方向,我一定会明白你的意思,并从中学习。这是提供建设性反馈的一部分:)并且像往常一样,在一天结束时,就解决问题的方式而言,没有错误和权利。 – rzetterberg 2011-04-27 14:49:11

+1

够公平的。你不需要file_get_contents。你可以直接使用simplexml_load_file,但不会是一个数组,而是一个SimpleXmlElement实例的Composite。此外,您不需要get_object_vars来访问属性,但可以简单地执行$ value ['id'],然后执行$ value-> EMPLOYEE [0] - > NAME来获取第一个员工或1以获取第二个或迭代雇员。有关完整示例,请参见http://pastebin.com/BWfzNTKS。 – Gordon 2011-04-27 14:49:48