使用 xml reader 在 php 中获取 xml 文件的 <!DOCTYPE>
get <!DOCTYPE> of xml file in php using xml reader
这是示例 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 file.I 后需要检查 XML 文件是否包含雅虎提要?
您也可以提出更好的选择。
我的尝试:
$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
}
}
}
}
}
基本上在这个例子中我在整个文件中搜索雅虎,
我不想在整个文件中搜索我只想获取文档类型元素并搜索该字符串。
您可以使用 DOMDocument and get the systemId:
而不是 XMLReader
$doc = new DOMDocument();
$doc->load($myxmlfilecontent);
$systemId = $doc->doctype->systemId;
if (stripos($systemId, 'yahoo') !== false) {
echo "yahoo read";
} else {
echo "not yahoo read";
}
您可以将节点类型检查为 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">
这是示例 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 file.I 后需要检查 XML 文件是否包含雅虎提要?
您也可以提出更好的选择。
我的尝试:
$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
}
}
}
}
}
基本上在这个例子中我在整个文件中搜索雅虎, 我不想在整个文件中搜索我只想获取文档类型元素并搜索该字符串。
您可以使用 DOMDocument and get the systemId:
而不是 XMLReader$doc = new DOMDocument();
$doc->load($myxmlfilecontent);
$systemId = $doc->doctype->systemId;
if (stripos($systemId, 'yahoo') !== false) {
echo "yahoo read";
} else {
echo "not yahoo read";
}
您可以将节点类型检查为 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">