这是示例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 type元素并搜索该字符串。
答案 0 :(得分:1)
您可以将节点类型检查为DOC_TYPE
节点,然后使用readOuterXml()
...
$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">
答案 1 :(得分:0)
您可以使用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";
}