使用PHP获取<! - ?xml-stylesheet ...? - >的属性

时间:2014-07-23 15:01:35

标签: php xml getelementsbytagname

我在XML文件中有这个:

<?xml-stylesheet href="../StyleSheets/VDD11.xsl" type="text/xsl"?>

我想获取此属性的值:href=""。 我正在使用PHP 5。 我已尝试过此代码,但不想工作:

function find_XSL_Fiche($file)
{
    $xml = new DOMDocument();
    $xml->load($file);
    echo $file.'<br />';
    $searchNode = $xml->getElementsByTagName( "xml-stylesheet" );
    $xsl = "";
    foreach ($searchNode as $searchNode)
    {
        $xsl = $searchNode->getAttribute('href'); 
    }
    echo $xsl;
    return $xsl;
}

最后,我想得到../StyleSheets/VDD11.xsl

感谢名单

1 个答案:

答案 0 :(得分:1)

这是一个处理指令节点。您可以使用Xpath来获取它:

获取所有处理指令节点:
//processing-instruction()

按名称过滤:
//processing-instruction()[name() = "xml-stylesheet"]

将第一个找到的PI转换为字符串:
string(//processing-instruction()[name() = "xml-stylesheet"])

$dom = new DOMDocument();
$dom->loadXml(
 '<?xml version="1.0"?><?xml-stylesheet href="../StyleSheets/VDD11.xsl" type="text/xsl"?><xml/>'
);
$xpath = new DOMXpath($dom);

var_dump(
  $xpath->evaluate(
    'string(//processing-instruction()[name() = "xml-stylesheet"])'
  )
);

输出:https://eval.in/171053

string(47) "href="../StyleSheets/VDD11.xsl" type="text/xsl""

PI的内容是文本,没有固定的结构。因此,您需要使用字符串函数或PCRE手动从结果中解析数据。