Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SimpleXML xpath查询结果_Php_Xml_Xpath_Simplexml - Fatal编程技术网

PHP SimpleXML xpath查询结果

PHP SimpleXML xpath查询结果,php,xml,xpath,simplexml,Php,Xml,Xpath,Simplexml,我一直在寻找这个答案,我找到的答案似乎表达了我认为我理解的东西。很明显我错过了什么。我对xPath查询的结果感到困惑。我简化了我的问题,在这里发布了一个测试用例 我的真实xml在不同的深度有几个数据集节点。最后,我希望获得每个具有给定标签的dataset元素,然后循环该元素并获得字段值(在不同的位置(或深度),因此我认为我需要xpath)。我可以使用xpath成功地获取所需的数据集元素。然而,当我在这个结果对象上运行xpath时,它会得到我想要的字段以及所有其他字段。我不明白为什么它不仅返回fi

我一直在寻找这个答案,我找到的答案似乎表达了我认为我理解的东西。很明显我错过了什么。我对xPath查询的结果感到困惑。我简化了我的问题,在这里发布了一个测试用例

我的真实xml在不同的深度有几个数据集节点。最后,我希望获得每个具有给定标签的dataset元素,然后循环该元素并获得字段值(在不同的位置(或深度),因此我认为我需要xpath)。我可以使用xpath成功地获取所需的数据集元素。然而,当我在这个结果对象上运行xpath时,它会得到我想要的字段以及所有其他字段。我不明白为什么它不仅返回field1、field2和field3。当我打印r($value[0])时,它只显示我想要的字段。但是,当我在$value[0]上运行xpath时,它会返回xml文档中的所有字段

示例XML

<myxml>
    <dataset label="wanteddata" label2="anotherlabel">
        <dataitem>
            <textdata>
                <field label="label1">field1</field>
                <field label="label2">field2</field>
                <field label="label3">field3</field>
            </textdata>
        </dataitem>
    </dataset>
    <dataset label="unwanteddata" label2="unwantedanotherlabel">
        <dataitem>
            <textdata>
                <field label="label4">field4</field>
                <field label="label5">field5</field>
                <field label="label6">field6</field>
            </textdata>
        </dataitem>
    </dataset>
</myxml>
代码输出:

Array
(
[0] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [label] => label1
            )
    )
[1] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [label] => label2
            )
    )
[2] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [label] => label3
            )
    )
[3] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [label] => label4
            )
    )
[4] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [label] => label5
            )
    )
[5] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [label] => label6
            )
    )
)

//field
选择整个XML文档中的所有
元素,而不管从哪个上下文节点调用该XPath。要使XPath成为上下文节点,需要在XPath的开头添加一个点(
)。在XPath中,(
)引用当前上下文节点:

print_r($value[0]->xpath('.//field'));

那么xpath的第一个结果并没有将我局限于xml文档中的那个节点?我还在处理主要的原始文档?我认为$value[0]将只包含并有权访问该数据集元素。
print_r($value[0]->xpath('.//field'));