我试图将xpath用于简单的事情,但我没有取得成功。
我有以下XML:
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Blank_A4_3" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="9ee0559e-6301-4cbe-b82b-2aa69bbe43c1">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="Parameter1" class="java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString></jasperReport>
我试图这样做:
$queryString = $xml->xpath("/queryString");
但这是返回数组(0)。
答案 0 :(得分:0)
您的XML(http://jasperreports.sourceforge.net/jasperreports)中有一个默认命名空间,因此您需要注册它并使用它来使用XPath查找任何元素...
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
$xml = <<<EOB
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Blank_A4_3" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="9ee0559e-6301-4cbe-b82b-2aa69bbe43c1">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="Parameter1" class="java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString></jasperReport>
EOB;
$xml = simplexml_load_string($xml);
$xml->registerXPathNamespace("d", "http://jasperreports.sourceforge.net/jasperreports");
$queryString = $xml->xpath("//d:queryString");
print_r($queryString[0]->asXML());
在代码中,我使用d的伪前缀作为默认命名空间,然后将其作为查询的一部分。还要注意在开始时使用// - 在XPath表达式的开头使用单个/假设它是一个根元素,//搜索任何元素。
输出是......
<queryString>
<![CDATA[]]>
</queryString>