首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xpath不工作[Jasper ]

Xpath不工作[Jasper ]
EN

Stack Overflow用户
提问于 2017-10-19 14:08:06
回答 1查看 385关注 0票数 0

我试图用xpath来做一些简单的事情,但我没有取得成功。

我有以下XML:

代码语言:javascript
复制
 <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)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-19 14:49:06

您的XML (http://jasperreports.sourceforge.net/jasperreports)中有一个默认的命名空间,因此您需要注册它并使用它查找使用XPath的任何元素.

代码语言:javascript
复制
<?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表达式的开头使用一个//是假设它是根元素,//搜索任何元素。

输出是..。

代码语言:javascript
复制
<queryString>
    <![CDATA[]]>
</queryString>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46831879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档