在PHP中将使用SimpleXML的代码移植到Dom
我有一个扩展PDO的类,使其能够从xml文件中提取配置。不幸的是,我们的托管提供商已经禁用了SimpleXML,因此我需要重构代码以使用Dom,而Dom是可用的 我正在使用以下代码:在PHP中将使用SimpleXML的代码移植到Dom,php,dom,refactoring,simplexml,Php,Dom,Refactoring,Simplexml,我有一个扩展PDO的类,使其能够从xml文件中提取配置。不幸的是,我们的托管提供商已经禁用了SimpleXML,因此我需要重构代码以使用Dom,而Dom是可用的 我正在使用以下代码: class xmlPDO extends PDO { public function __construct($xml_uri){ $xml = simplexml_load_file($xml_uri); $dsn_template = "%s:host=%s; dbnam
class xmlPDO extends PDO
{
public function __construct($xml_uri){
$xml = simplexml_load_file($xml_uri);
$dsn_template = "%s:host=%s; dbname=%s";
$dsn = sprintf($dsn_template, $xml->dsn->driver, $xml->dsn->host, $xml->dsn->dbname);
parent::__construct($dsn, $xml->username, $xml->password);
}
}
要读取以下XML,请执行以下操作:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE database [
<!ELEMENT database (name, description, dsn, username, password)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT dsn (driver, dbname, host)>
<!ELEMENT driver (#PCDATA)>
<!ELEMENT dbname (#PCDATA)>
<!ELEMENT host (#PCDATA)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>
]>
<database>
<name>Test Database</name>
<description>Localhost test database, use only for testing</description>
<dsn>
<driver>mysql</driver>
<dbname>test</dbname>
<host>localhost</host>
</dsn>
<username>user</username>
<password>test</password>
</database>
我正在查看php.net文档,并且很难弄清楚我应该如何做到这一点。我似乎无法提供任何清晰的代码示例来提取这样的数据。因为您已经有了DTD设置,所以最需要做的就是向各种标记添加和标识属性,然后使用getElementById 如果您不介意总是处理nodelist集合,那么您可以始终使用getElementsByTagName
否则,必须使用遍历函数和元素属性nextSibling、previssibling、childNodes来遍历DOM。您还可以使用xpath查询,这将简化遍历。因为您已经有了DTD设置,所以最需要做的事情是向各种标记添加和标识属性,然后使用getElementById 如果您不介意总是处理nodelist集合,那么您可以始终使用getElementsByTagName
否则,必须使用遍历函数和元素属性nextSibling、previssibling、childNodes来遍历DOM。您还可以使用xpath查询,这将简化遍历。您的宿主提供程序是否禁用了SimpleXML,或者您刚刚禁用了SimpleXML从URL加载文件的功能?后者比前者普遍得多,如果是后者,后者也可能遭受同样的命运 在深入研究DomDocument之前,请尝试使用curl函数下载XML,然后使用创建SimpleXML对象。DomDocument是一个健壮的、没有很好文档记录的API
如果您最终不得不走DomDocument路线,那么您需要这样做。这是从DomDocument对象中获取信息的最直接的方法。您的宿主提供商是否禁用了SimpleXML,或者您刚刚禁用了SimpleXML从URL加载文件的功能?后者比前者普遍得多,如果是后者,后者也可能遭受同样的命运
<?php
$dom = new DOMDocument();
$dom->load( 'file.xml' );
$xp = new DOMXpath($dom);
$username = $xp->evaluate('//username');
$password = $xp->evaluate('//password');
if ( $username->length > 0 ) {
echo $username->item(0)->nodeValue;
}
if ( $password->length > 0 ) {
echo $password->item(0)->nodeValue;
}
在深入研究DomDocument之前,请尝试使用curl函数下载XML,然后使用创建SimpleXML对象。DomDocument是一个健壮的、没有很好文档记录的API
如果您最终不得不走DomDocument路线,那么您需要这样做。这是从DomDocument对象获取信息的最直接的方法。或者我可以使用行为类似于简单xml但在禁用简单xml时工作的类。或者我可以使用行为类似于简单xml但在禁用简单xml时工作的类。,simplexml被-disable simplexml禁用Nope,simplexml被-disable simplexml禁用你还在尝试移植它吗?你试过任何一个答案吗?你还在尝试移植吗?你试过任何答案吗?
<?php
$dom = new DOMDocument();
$dom->load( 'file.xml' );
$xp = new DOMXpath($dom);
$username = $xp->evaluate('//username');
$password = $xp->evaluate('//password');
if ( $username->length > 0 ) {
echo $username->item(0)->nodeValue;
}
if ( $password->length > 0 ) {
echo $password->item(0)->nodeValue;
}