XPath评估查询并检索值

时间:2012-09-24 10:43:53

标签: php xml xslt xpath

我有这段代码

$XMLTranslationObject = new DOMDocument();
$XMLTranslationObject->load("../xdata/xml/translation/en-US/profile.xml");

$Xpath = new DOMXpath($XMLTranslationObject);
$Result = $Xpath->evaluate("Field[@Name = 'AttachedFiles']")->nodeValue;

echo $Result;

和xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<Translation language="en-US">

    <!-- Basic Begin -->
        <Field Name="SiteName">Brainfavor</Field>
        <Field Name="Error">Error</Field>
    <!-- Basic End -->

    <!-- Header Begin -->
        <Field Name="Name">Name</Field>
        <Field Name="WorkingAt">Working at</Field>
        <Field Name="Phone">Phone</Field>

女巫给了我以下错误

注意:未定义的属性:第30行的C:\ xampp \ htdocs \ brainbook \ profile \ loadmore.php中的DOMNodeList :: $ nodeValue

我想要的只是检索字段名为AttachedFiles的行的值,只需运行一个简单的Xpath查询并检索结果。使用XSLT很容易

<xsl:value-of select="$TranslationProfile/Field[@Name = 'AttachedFiles']"/>

但我之前没有使用PHP Xpath。

1 个答案:

答案 0 :(得分:2)

正确的配方是

$Xpath->evaluate("string(Field[@Name = 'AttachedFiles'])");

这是有效的,因为string函数将节点集(在这种情况下实际上只包含一个节点)转换为集合中第一个节点的值。

警告:这意味着如果有多个元素与查询匹配,则只有第一个元素(按文档顺序)将返回其值。