这是Sample XML文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Catalog SYSTEM "http://store.yahoo.com/doc/dtd/Catalog.dtd">
<Catalog Store`enter code here`ID="yhst-69328165909994" StoreName="Inmod Modern Furniture" PublishTimestamp="1517733517">
<Table ID="main-table-for-download">
<TableField ID="name" Type="text"/>
<TableField ID="sale-price" Type="numbers"/>
<TableField ID="path" Type="text"/>
<TableField ID="taxable" Type="yes-no"/>
<TableField ID="ship-weight" Type="numbers"/>
<TableField ID="price" Type="numbers"/>
<TableField ID="orderable" Type="orderable"/>
<TableField ID="code" Type="text"/>
</Table>
我只想在读取该XML文件后获取此元素。我需要检查该XML文件是否包含yahoo feed?
你也可以建议任何更好的选择。
我的尝试:
$reader = new XMLReader();
$reader->xml($myxmlfilecontent);
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
//array_push($nodeList, $reader->localName);
if (stripos($xml, 'yahoo') !== false) {
echo 'yahoo read';die
}else{
echo 'not yahoo read';die
}
}
}
}
}
基本上在这个例子中我在整个文件中搜索雅虎,我不想在整个文件中搜索我只想获取doc类型元素并搜索该字符串。
您可以将节点类型检查为DOC_TYPE
节点,然后使用readOuterXml()
获取该节点的xml ...
$reader = new XMLReader();
$reader->xml($myxmlfilecontent);
while ($reader->read()) {
if ($reader->nodeType == XMLReader::DOC_TYPE) {
echo $reader->readOuterXml();
}
}
这输出 -
<!DOCTYPE Catalog SYSTEM "http://store.yahoo.com/doc/dtd/Catalog.dtd">
您可以使用DOMDocument而不是XMLReader来获取systemId:
$doc = new DOMDocument();
$doc->load($myxmlfilecontent);
$systemId = $doc->doctype->systemId;
if (stripos($systemId, 'yahoo') !== false) {
echo "yahoo read";
} else {
echo "not yahoo read";
}