php-从文件夹中获取xml文件,循环并获取内容

php-从文件夹中获取xml文件,循环并获取内容,php,xml,dom,foreach,Php,Xml,Dom,Foreach,我正在尝试从一个文件夹中获取所有xml文件,这与我在上找到的以下代码配合得很好: 现在,我试图从每个xml文件中获取若干内容 在“/”部分之后使用此选项,然后继续使用代码 echo$xml_文件。“”; 我得到每个文件的全部内容 但我只想检索几个元素和属性。 我使用的xml文件是基于openimmo的。这些xml文件的结构如下(节选): 12345 公司名称 12345 我使用另一个脚本,解析单个xml文件,并检索其内容,如下所示: echo 'Zip-Code: '.$user->

我正在尝试从一个文件夹中获取所有xml文件,这与我在上找到的以下代码配合得很好:

现在,我试图从每个xml文件中获取若干内容

在“/”部分之后使用此选项,然后继续使用代码

echo$xml_文件。“

”;
我得到每个文件的全部内容

但我只想检索几个元素和属性。

我使用的xml文件是基于openimmo的。这些xml文件的结构如下(节选):


12345
公司名称
12345
我使用另一个脚本,解析单个xml文件,并检索其内容,如下所示:

echo 'Zip-Code: '.$user->immobilie->geo->plz.'<br />';
echo“邮政编码:”。$user->immobile->geo->plz.

但是我怎样才能得到像
geo->plz这样的元素的不同内容呢“
或类似于
的属性,通过循环遍历给定文件夹的每个文件?

可以做的是将所有xml文件转换为数组。因此,您可以拥有包含所有值的多维数组,然后您可以在其中爬行并获得所需的内容:

foreach($files as $filename) {
        $xml_file = file_get_contents($filename, FILE_TEXT);      
        $xml = simplexml_load_string($xml_file, "SimpleXMLElement", LIBXML_NOCDATA);
        $json = json_encode($xml);
        $arr = json_decode($json,TRUE);
     }
可以使用类将xml解析为DOM。还可以使用
getElementsByTagName()
根据元素名称选择元素,使用
nodeValue
获取元素文本,使用
getAttribute()
获取属性值

$doc = new DOMDocument();
$doc->loadXML($xml_file);
$nodeVal = $doc->getElementsByTagName("geo")->item(0)->nodeValue;
// return 12345
$nodeAttr = $doc->getElementsByTagName("haus")->item(0)->getAttribute("haustyp");
// return DOPPELHAUSHAELFTE
所以你的代码应该改成

$doc = new DOMDocument();
foreach($files as $filename) {
    $xml_file = file_get_contents($filename, FILE_TEXT);
    $doc->loadXML($xml_file);
    $nodeVal = $doc->getElementsByTagName("geo")->item(0)->nodeValue;
    $nodeAttr = $doc->getElementsByTagName("haus")->item(0)->getAttribute("haustyp");
}

谢谢你的帮助!经过快速测试,它看起来像是在工作+我相信!但我会更深入地了解穆罕默德的答案,因为看起来我能更好地理解它…也谢谢你的帮助!你的代码正在为我工作,我将深入研究它,以获得我需要的输出。但我认为我可以从这个开始就实现它。到目前为止,我正在使用您的代码,除了“noteAttr/getAttribute”部分。我需要评论这一点,否则该网站是打破了,没有输出在所有。你能看到问题出在哪里吗?另一部分工作正常。@EMEm可能是文档中不存在目标元素。使用
$doc->getElementsByTagName(“haus”)->length
返回所选元素的计数再次感谢Mohammad!这让我找到了正确的方向!
foreach($files as $filename) {
        $xml_file = file_get_contents($filename, FILE_TEXT);      
        $xml = simplexml_load_string($xml_file, "SimpleXMLElement", LIBXML_NOCDATA);
        $json = json_encode($xml);
        $arr = json_decode($json,TRUE);
     }
$doc = new DOMDocument();
$doc->loadXML($xml_file);
$nodeVal = $doc->getElementsByTagName("geo")->item(0)->nodeValue;
// return 12345
$nodeAttr = $doc->getElementsByTagName("haus")->item(0)->getAttribute("haustyp");
// return DOPPELHAUSHAELFTE
$doc = new DOMDocument();
foreach($files as $filename) {
    $xml_file = file_get_contents($filename, FILE_TEXT);
    $doc->loadXML($xml_file);
    $nodeVal = $doc->getElementsByTagName("geo")->item(0)->nodeValue;
    $nodeAttr = $doc->getElementsByTagName("haus")->item(0)->getAttribute("haustyp");
}