Note.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="./xsl/avsdk.xsl"?>
<Table CreatedOn="Tue Nov 17 22:30:53 PST 2015" Name="Hello" Version="3.6.10294.2" TimeStamp="1447828253">
.....
.....
</Table>
Previoulsy我们使用了上面的xml文件并使用下面的PHP命令来检索Table标签Name和Version的值,并使用Xml对象处理Table数据以将其转换为其他格式。
PHP:
$xml = simplexml_load_file("note.xml")
$table_attrs = $xml->attributes();
if( 0 === strpos( $table_attrs["Name"], "Hello" ) )
{
.....
}
else if( 0 === strpos( $table_attrs["Name"], "Hai" ) )
{
.....
}
现在XML文件格式改变如下。所以我更改了下面的命令(即$ xml-&gt; Table [0] - &gt; attributes())以获取Table标签名称和版本,并将整个表格内容存储为XML对象以将其转换为其他格式。当我试图运行下面的PHP命令时,它会抛出错误“致命错误:调用null成员函数属性()”。请让我知道获取表名和版本的命令,以及如何将整个Table内容存储为xml对象
Note.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="#sc_stylesheet"?>
<!DOCTYPE supportchart [<!ATTLIST xsl:stylesheet id ID #REQUIRED>]>
<xsl:stylesheet id="sc_stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:variable name="support_chart">
<supportchart>
<Table CreatedOn="Wed Feb 03 15:52:32 2016" Name="Hello" Version="4.2.326.0" Timestamp="1454543552.61">
.....
.....
</Table>
</supportchart>
</xsl:variable>
<xsl:template match="Table">
....
....
<xsl:template match="xsl:template"> </xsl:template>
</xsl:stylesheet>
PHP:
$xml = simplexml_load_file("note.xml")
$table_attrs = $xml->Table[0]->attributes();
if( 0 === strpos( $table_attrs["Name"], "Hello" ) )
{
.....
}
else if( 0 === strpos( $table_attrs["Name"], "Hai" ) )
{
.....
}
答案 0 :(得分:0)
如前所述,XSLT是一个格式良好的XML文档,大多数解析器都应该处理它,但通常不会解析数据的脚本文件(类似于解析MySQL数据的PHP脚本)。但由于实际值用于XSLT的变量定义,因此请考虑使用SimpleXMLElement,然后使用其xpath()
方法来解析所需的属性。在XPath查询中,属性在其引用中需要@
,但节点值不需要:
$data = file_get_contents("$note.xml");
$xml = new SimpleXmlElement($data);
$nameArray = $xml->xpath("//Table/@Name");
$versionArray = $xml->xpath("//Table/@Version");
$timestampArray = $xml->xpath("//Table/@Timestamp");
如果您需要解析名称空间前缀中包含的节点或属性值(此处为xsl
),则需要首先注册xsl
名称空间:
$data = file_get_contents("$note.xml");
$xml = new SimpleXmlElement($data);
$xml->registerXPathNamespace('xsl', 'http://www.w3.org/1999/XSL/Transform');
$variableArray = $xml->xpath("//xsl:variable/@name");