我正在尝试从一个文件夹中获取所有xml文件,这与我在SO here上找到的这段代码可以很好地工作:
$files = glob("folder/*xml");
if (is_array($files)) {
foreach($files as $filename) {
$xml_file = file_get_contents($filename, FILE_TEXT);
// and proceed with your code
}
}
现在我正试图从每个xml文件中获取多个内容。
通过在“ //之后继续使用您的代码”部分
echo $xml_file.'<br /><br />';
我了解了每个文件的全部内容。
但是我只想检索几个元素和属性。
我正在使用的xml文件是基于openimmo的。这些xml文件的结构如下所示(摘录):
<openimmo>
<anbieter>
<anbieternr>12345</anbieternr>
<firma>company name</firma>
<immobilie>
<objektkategorie>
<objektart>
<haus haustyp="DOPPELHAUSHAELFTE"/>
</objektart>
</objektkategorie>
<geo>
<plz>12345</plz>
</geo>
</immobilie>
</anbieter>
</openimmo>
我使用另一个脚本,其中解析了一个xml文件,我可以像这样检索它的内容:
echo 'Zip-Code: '.$user->immobilie->geo->plz.'<br />';
但是如何通过遍历给定文件夹的每个文件来获取诸如geo->plz"
之类的元素或诸如<haus haustyp="DOPPELHAUSHAELFTE"/>
之类的属性的不同内容?
答案 0 :(得分:1)
您可以做的是将所有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);
}
答案 1 :(得分:1)
您可以使用DOMDocument
类将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");
}