使用xml reader在php中获取xml文件

问题描述 投票:-1回答:2

这是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类型元素并搜索该字符串。

php xml xmlreader
2个回答
1
投票

您可以将节点类型检查为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">

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";
}

Demo

© www.soinside.com 2019 - 2024. All rights reserved.