PHP SimpleXMLElement使用xpath

时间:2017-01-27 13:22:26

标签: php xml xpath

XML:

<?xml version="1.0" encoding="UTF-8"?>
<precompilata xsi:noNamespaceSchemaLocation="730_precompilata.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <proprietario>
        <codiceRegione>604</codiceRegione>
        <codiceAsl>120</codiceAsl>
        <codiceSSA>010011</codiceSSA>
        <cfProprietario>x42Ft28lh/e4WGpFQmpIrmwaXeii0e8k2F/59MHVLoyhSf//ZDrpTWsFFqZXlJgMq9+blw63F2UMy2IchdXBJn8j9AAVPwShVLsWZ9bv4cotqNJHxvBee4Y/O1r1G3MAm2/uH0NL8vgS5mfp11GCVwm1j63fpx+CcL/fjQHiLlk=</cfProprietario>
    </proprietario>

    <documentoSpesa>
        <idSpesa>
            <pIva>98765432104</pIva>
            <dataEmissione>2016-01-01</dataEmissione>
            <numDocumentoFiscale>
                <dispositivo>1</dispositivo>
                <numDocumento>3002</numDocumento>
            </numDocumentoFiscale>
        </idSpesa>
        <dataPagamento>2016-01-01</dataPagamento>
        <flagOperazione>I</flagOperazione>
        <cfCittadino>iKvd9JQntqxPBT2UA/OFfztSNLidocP8Op+NfODzfTdxFWzkcdZrJz5gvCuqv7Dh/r3Cin1ZQMmg/BofIqYCyq2PcC+PJzbvQCocDdl6FrXVXs3W5JhnX7VpWFGCLPYYY2WL+RWKxhfkGqeY8+NCVfQ1lEA15g3W5AabJ15Tthk=</cfCittadino>
        <voceSpesa>
            <tipoSpesa>AA</tipoSpesa>
            <importo>10.56</importo>
        </voceSpesa>
        <voceSpesa>
            <tipoSpesa>AD</tipoSpesa>
            <importo>100.50</importo>
        </voceSpesa>
    </documentoSpesa>

    <documentoSpesa>
        <idSpesa>
            <pIva>98765432104</pIva>
            <dataEmissione>2016-01-22</dataEmissione>
            <numDocumentoFiscale>
                <dispositivo>1</dispositivo>
                <numDocumento>1234</numDocumento>
            </numDocumentoFiscale>
        </idSpesa>
        <dataPagamento>2016-01-01</dataPagamento>
        <flagOperazione>I</flagOperazione>
        <cfCittadino>vCuqv7Dh/r3Cin1ZQMmg/BofIqYCyq2PcC+PJzbvQCocDdl6FrXVXs3W5JhnX7VpWFGCLPYYY2WL+RWKxhfkGqeY8+NCVfQ1lEA15g3W5AabJ15Tthk=</cfCittadino>
        <voceSpesa>
            <tipoSpesa>AA</tipoSpesa>
            <importo>10.56</importo>
        </voceSpesa>
        <voceSpesa>
            <tipoSpesa>AD</tipoSpesa>
            <importo>100.50</importo>
        </voceSpesa>
    </documentoSpesa>

</precompilata>

我有documentoSpesa的多个(N)孩子。 当voceSpesadocumentoSpesa->dataEmissione已存在时,我需要添加另一个孩子documentoSpesa->numDocumentoFiscale->numDocumento

例如,如果我需要在documentoSpesa->dataEmissione = 2016-01-22和documentoSpesa->numDocumentoFiscale->numDocumento = 1234

内添加此子项
<voceSpesa>
    <tipoSpesa>AD</tipoSpesa>
    <importo>99.50</importo>
</voceSpesa>

我不知道这是否是正确的方法:(它不起作用) $xml->xpath('/precompilata/documentoSpesa/idSpesa[dataEmissione = "'.$DocDate.'" and ../numDocumentoFiscale/numDocumento/text() = "'.docNum'"] ');

我想要的是什么:

<?xml version="1.0" encoding="UTF-8"?>
<precompilata xsi:noNamespaceSchemaLocation="730_precompilata.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <proprietario>
        <codiceRegione>604</codiceRegione>
        <codiceAsl>120</codiceAsl>
        <codiceSSA>010011</codiceSSA>
        <cfProprietario>x42Ft28lh/e4WGpFQmpIrmwaXeii0e8k2F/59MHVLoyhSf//ZDrpTWsFFqZXlJgMq9+blw63F2UMy2IchdXBJn8j9AAVPwShVLsWZ9bv4cotqNJHxvBee4Y/O1r1G3MAm2/uH0NL8vgS5mfp11GCVwm1j63fpx+CcL/fjQHiLlk=</cfProprietario>
    </proprietario>

    <documentoSpesa>
        <idSpesa>
            <pIva>98765432104</pIva>
            <dataEmissione>2016-01-01</dataEmissione>
            <numDocumentoFiscale>
                <dispositivo>1</dispositivo>
                <numDocumento>3002</numDocumento>
            </numDocumentoFiscale>
        </idSpesa>
        <dataPagamento>2016-01-01</dataPagamento>
        <flagOperazione>I</flagOperazione>
        <cfCittadino>iKvd9JQntqxPBT2UA/OFfztSNLidocP8Op+NfODzfTdxFWzkcdZrJz5gvCuqv7Dh/r3Cin1ZQMmg/BofIqYCyq2PcC+PJzbvQCocDdl6FrXVXs3W5JhnX7VpWFGCLPYYY2WL+RWKxhfkGqeY8+NCVfQ1lEA15g3W5AabJ15Tthk=</cfCittadino>
        <voceSpesa>
            <tipoSpesa>AA</tipoSpesa>
            <importo>10.56</importo>
        </voceSpesa>
        <voceSpesa>
            <tipoSpesa>AD</tipoSpesa>
            <importo>100.50</importo>
        </voceSpesa>
    </documentoSpesa>

    <documentoSpesa>
        <idSpesa>
            <pIva>98765432104</pIva>
            <dataEmissione>2016-01-22</dataEmissione>
            <numDocumentoFiscale>
                <dispositivo>1</dispositivo>
                <numDocumento>1234</numDocumento>
            </numDocumentoFiscale>
        </idSpesa>
        <dataPagamento>2016-01-01</dataPagamento>
        <flagOperazione>I</flagOperazione>
        <cfCittadino>vCuqv7Dh/r3Cin1ZQMmg/BofIqYCyq2PcC+PJzbvQCocDdl6FrXVXs3W5JhnX7VpWFGCLPYYY2WL+RWKxhfkGqeY8+NCVfQ1lEA15g3W5AabJ15Tthk=</cfCittadino>
        <voceSpesa>
            <tipoSpesa>AA</tipoSpesa>
            <importo>10.56</importo>
        </voceSpesa>
        <voceSpesa>
            <tipoSpesa>AD</tipoSpesa>
            <importo>100.50</importo>
        </voceSpesa>


        <voceSpesa>
            <tipoSpesa>AD</tipoSpesa>
            <importo>99.50</importo>
        </voceSpesa>


    </documentoSpesa>

</precompilata>

这是测试代码:http://pastebin.com/eaAAdTZ5 这是csv文件http://simoneseri.com/Anno2016_test.csv(放在同一个脚本目录中)

0 个答案:

没有答案