获取所有元素的xpath

时间:2010-10-21 15:32:02

标签: php simplexml

我使用simplexml来解析xml,我可以得到单个节点但不是我想要的所有节点

例如

    $xmlObject = simplexml_load_file($xml_file); // load the xml file
        $cols = $xmlObject->RESULTSET->ROW->COL;
    foreach ( $cols as $COL) {
        echo $COL->DATA;
    }

只给了我第一行的第一列,我试过

    $xmlObject = simplexml_load_file($xml_file); // load the xml file
    $cols = $xmlObject->xpath('*//COL');
    foreach ( $cols as $COL) {
        echo $COL->DATA;
    }

并且什么都没有回来

任何想法我可能做错了什么?

  <?xml version="1.0" encoding="UTF-8"?>
  <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
    <RESULTSET FOUND="445">
        <ROW MODID="45" RECORDID="1">
            <COL>
                <DATA>Integrating Ethanol</DATA>
            </COL>
            <COL>
                <DATA/>
            </COL>
            <COL>
                <DATA>train track and gas pump</DATA>
            </COL>
            <COL>
                <DATA/>
            </COL>
            <COL>
                <DATA/>
            </COL>
            <COL>
                <DATA>1.jpg</DATA>
            </COL>
            <COL>
                <DATA/>
            </COL>
        </ROW>
        <ROW MODID="29" RECORDID="3">
            <COL>
                <DATA>Keeping in Balance</DATA>
            </COL>
            <COL>
                <DATA>21</DATA>
            </COL>
            <COL>
                <DATA>book cover of Sweet Invisible Body</DATA>
            </COL>
            <COL>
                <DATA/>
            </COL>
        </ROW>
    </RESULTSET>
  </FMPXMLRESULT>

2 个答案:

答案 0 :(得分:1)

您可以尝试使用以下忽略命名空间的XPath表达式:

//*[local-name() = 'COL']

此表达式选择名称为“COL”的所有节点,无论节点位于什么名称空间中。

答案 1 :(得分:0)

这个的正确xpath是

//COL

没有

*

我认为您的问题可能是XML命名空间,当我通过使用Google找到的此工具运行XML时,这会导致我的问题:http://www.xmlme.com/XpathTool.aspx