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>

魔女は私に次のエラーを与えます

注意: 未定義のプロパティ: 30 行目の C:\xampp\htdocs\brainbook\profile\loadmore.php の 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機能するのは、関数がノード セット (この場合、実際には 1 つのノードのみで構成される) をセット内の最初のノードの値に変換するためです。

警告: これは、クエリに一致する要素が複数ある場合、(ドキュメント順で) 最初の要素のみが値を返すことを意味します。

于 2012-09-24T10:52:03.623 に答える