PHP xpath无法找到子节点但找不到父节点

我能够加载XML文档并创建SimpleXMLElement - 我也可以使用XPATH查询它但是我 我注意到的行为使我感到困惑。 当我加载XML并创建SimpleXMLElement时 - 它具有以下结构</ p>

XML如下所示</ p>

 &lt; StructuredXMLResume&gt; \  n&lt; ContactInfo&gt; 
&lt; PersonName&gt;
&lt; FullName&gt; Tom Jones&lt; / FullName&gt;
&lt; GivenName&gt; Tom&lt; / GivenName&gt;
&lt; MiddleName /&gt;
&lt; FamilyName&gt; Jones&lt; / FamilyName&gt;
&lt; / PersonName&gt;
&lt; / ContactInfo&gt;
&lt; / StructuredXMLResume&gt;

[0] =&gt; SimpleXMLElement对象

[PersonName] =&gt; SimpleXMLElement对象

[FullName] =&gt; Tom Jones
[GivenName] =&gt; Tom
[MiddleName] =&gt; SimpleXMLElement对象


[FamilyName] =&gt; Jones

</ code> </ pre>

当我执行 $ xml-&gt; xpath('// PersonName')</ code>我得到的结果如下</ p>

  [0] =&gt; SimpleXMLElement Object 

[FullName] =&gt; Tom Jones
[GivenName] =&gt; Tom
[MiddleName] =&gt; SimpleXMLElement对象

[FamilyName] =&gt; Jones

</ code> </ pre>

但是当我执行 $ xml-&gt; xpath('// GivenName')</ code>时,我得到以下结果 - 我无法理解</ p>
\ n

  [0] =&gt; SimpleXMLElement Object 


</ code> </ pre>

有人可以帮我理解我的错误是什么吗?</ p>
</ div>

展开原文

原文

I am able to load an XML document and create a SimpleXMLElement - I am also able to query it using XPATH but I am perplexed by the behavior I am noticing. When I load the XML and create a SimpleXMLElement - it is of the below structure

XML is as below

 <StructuredXMLResume>
        <ContactInfo>
            <PersonName>
                <FullName>Tom Jones</FullName>
                <GivenName>Tom</GivenName>
                <MiddleName />
                <FamilyName>Jones</FamilyName>
            </PersonName>
       </ContactInfo>
 </StructuredXMLResume>


[0] => SimpleXMLElement Object
        (
            [PersonName] => SimpleXMLElement Object
                (
                    [FullName] => Tom Jones
                    [GivenName] => Tom
                    [MiddleName] => SimpleXMLElement Object
                        (
                        )

                    [FamilyName] => Jones
                )

When I execute $xml->xpath('//PersonName') I get the right result which is as below

[0] => SimpleXMLElement Object
        (
            [FullName] => Tom Jones
            [GivenName] => Tom
            [MiddleName] => SimpleXMLElement Object
                (
                )

            [FamilyName] => Jones
        )

But when I execute $xml->xpath('//GivenName') I get the below result - which I am unable to understand

[0] => SimpleXMLElement Object
        (
        )

Can someone please help me understand what my error is?

douchi2022
douchi2022 还添加了XML文件
接近 6 年之前 回复
douting1871
douting1871 请向我们展示XML源代码,而不是SimpleXMLElement调试。这里缺少很多信息。
接近 6 年之前 回复

1个回答



在我看来,它正如预期的那样工作。 SimpleXMLElement :: xpath </ code> 返回 SimpleXMLElement </ code>,你得到一个包含一个 SimpleXMLElement </ code>的数组。</ p>

你试过这个:</ p>
\ n

  $ nodes = $ xml-&gt; xpath('// GivenName'); 
echo $ nodes [0]; //应该输出:Tom
//或者如果不起作用,请尝试:
echo(string)$ nodes [0];
</ code> </ pre>
</ div>

展开原文

原文

It looks to me like it's working as expected. SimpleXMLElement::xpath returns an array of SimpleXMLElements, and you are getting an array with one SimpleXMLElement in it.

Have you tried this:

$nodes = $xml->xpath('//GivenName');
echo $nodes[0];  // should output:  Tom
// or if that doesn't work, try:
echo (string)$nodes[0];

dongzha5934
dongzha5934 XPath位置路径始终返回节点列表,SimpleXML将节点列表作为数组返回。 它不会根据元素计数更改变量类型。 并且'// GivenName'在文档中的任何位置返回具有该名称的任何元素节点。 它可以是没有或几个(从技术角度来看)。
接近 6 年之前 回复
dongnai3960
dongnai3960 它工作 - 谢谢 - 所以,如果我理解正确的情况 - 当我搜索一个特定的独特元素时,我得到一个单行的数组。 但是帮助我理解为什么当我说print_r($ node)时我无法看到包含的值,但是当我说print_r($ node [0])时我看到了值
接近 6 年之前 回复
dongshuofu0039
dongshuofu0039 该数组不为空。 它有一个元素,就像我说的那样。 我打算在上面的例子中使用'// GivenName'。 你能试试吗?
接近 6 年之前 回复
dongnao6858
dongnao6858 我同意数组是空的 - 但是如何访问我需要的单个元素?
接近 6 年之前 回复
doushi3454
doushi3454 这输出SimpleXMLElement对象([FullName] => Tom Jones [GivenName] => Tom [MiddleName] => SimpleXMLElement对象()[FamilyName] => Jones)
接近 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问