通过id解析XML解析
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>
您可以使用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"
}
这只是吐出一切为我我需要它只显示部门的雇员 – 2011-04-27 13:40:48
我只需要发明时间旅行。不要轻易做到这一点 – trickwallett 2011-04-27 13:59:44
编辑:从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变量中可以遍历并按照你所说的方式检索名称。
1-没有解释我做错了什么。在教别人错误的事情之前,请熟悉建设性的反馈。 – rzetterberg 2011-04-27 14:41:38
我不是想成为一个混蛋,我只是想在这里证明一个观点。如果你告诉我我做错了什么,或者指出了正确的方向,我一定会明白你的意思,并从中学习。这是提供建设性反馈的一部分:)并且像往常一样,在一天结束时,就解决问题的方式而言,没有错误和权利。 – rzetterberg 2011-04-27 14:49:11
够公平的。你不需要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
向我们展示您的任何代码以帮助您 – TOUDIdel 2011-04-27 05:56:15
可能的重复[如何使用PHP的DOM解析器从XML中提取节点属性](http://*.com/questions/3993302/how-to-extract- a-node-attribute-from-xml-using-phps-dom-parser) – Gordon 2011-04-27 06:49:19
[getElementsByTagName with specific attribute]的可能重复(http://*.com/questions/4224286/php-getelementsbytagname-with-specific-attribute/4224309#4224309) – Gordon 2011-04-27 06:50:12