2

我有这个代码

$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>

女巫给了我以下错误

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

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

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

但我之前没有使用过 PHP Xpath。

4

1 回答 1

2

正确的公式是

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

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

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

于 2012-09-24T10:52:03.623 回答