PHP-XML文件上的XPATH请求-子级和同级


PHP - XPATH request on XML file - childrens and siblings

我有下面的XML文档,我需要从中为每个节点获取他的子节点(<KA>/<kod>和<TPV>/lt;TPV>>…<A>)。为了更好地理解,以下是我需要的:

<KATU/KA/kod> | <KATU/TPV/TPVS/TN> | <KATU/TPV/TPVS/TSA/TS/A>
k11 | VP11 | 11
k21 | VP21 | 21
k31 | VP31 | 31
k32 | VP32 | 32
k33 | VP33 | 33
k41 | VP41 | 41
k41 | VP41 | 42
k41 | VP41 | 43
k51 | VP51 | 51

主要问题(例如,来自示例k41和他的41,42,43的值)是,我需要得到的节点不是子节点,而是按<KA><TPV><KA><TPV>。。。

所以我需要找到所有<A> 节点(<TPV><TPVS><TSA><KA>/<kod>

我希望你能理解我的问题,因为我的英语,我无法再描述它了。

感谢回复

这是我的XML:

<?xml version="1.0" encoding="utf-8" ?>  
<PV>
    <PRAV_VZTAHY>
        <TYPPRA>
            <TN>VP</TN> 
        </TYPPRA>
    </PRAV_VZTAHY>
    <OPRAV_SUBJEKT>
        <CHAROS_KOD>1112</CHAROS_KOD> 
        <OPSUB_ADRESA>
            <adresa>
                <nazev_ulice>xxx</nazev_ulice> 
            </adresa>
        </OPSUB_ADRESA>
    </OPRAV_SUBJEKT>
    <OKRESY>
        <OKRES>
            <nuts4>123456</nuts4> 
            <name>asdf</name> 
        </OKRES>
        <OBCE>
            <OBEC>
                <kod>594580</kod> 
                <name>mn</name> 
            </OBEC>
            <KATU>
                <KA>
                    <kod>k11</kod> 
                    <name>q11</name> 
                </KA>
                <TPV>
                    <TPVS>
                        <TN>VP11</TN> 
                        <TSA>
                            <TS>
                                <A>11</A> 
                            </TS>
                        </TSA>
                    </TPVS>
                </TPV>
            </KATU>
        </OBCE>
        <OKRES>
            <nuts4>46786</nuts4> 
            <name>qwer</name> 
        </OKRES>
        <OBCE>
            <OBEC>
                <kod>525804</kod> 
                <name>mn</name> 
            </OBEC>
            <KATU>
                <KA>
                    <kod>k21</kod> 
                    <name>q21</name> 
                </KA>
                <TPV>
                    <TPVS>
                        <TN>VP21</TN> 
                        <TSA>
                            <TS>
                                <A>21</A> 
                            </TS>
                        </TSA>
                    </TPVS>
                </TPV>
            </KATU>
            <OBEC>
                <kod>540978</kod> 
                <name>mn</name> 
            </OBEC>
            <KATU>
                <KA>
                    <kod>k31</kod> 
                    <name>q31</name> 
                </KA>
                <TPV>
                    <TPVS>
                        <TN>VP31</TN> 
                        <TSA>
                            <TS>
                                <A>31</A> 
                            </TS>
                        </TSA>
                    </TPVS>
                </TPV>
                <KA>
                    <kod>k32</kod> 
                    <name>q32</name> 
                </KA>
                <TPV>
                    <TPVS>
                        <TN>VP32</TN> 
                        <TSA>
                            <TS>
                                <A>32</A>
                            </TS>
                        </TSA>
                    </TPVS>
                </TPV>
                <KA>
                    <kod>k33</kod> 
                    <name>q33</name> 
                </KA>
                <TPV>
                    <TPVS>
                        <TN>VP33</TN> 
                        <TSA>
                            <TS>
                                <A>33</A>  
                            </TS>
                        </TSA>
                    </TPVS>
                </TPV>
            </KATU>
            <OBEC>
                <kod>541265</kod> 
                <name>mn</name> 
            </OBEC>
            <KATU>
                <KA>
                    <kod>k41</kod> 
                    <name>q41</name> 
                </KA>
                <TPV>
                    <TPVS>
                        <TN>VP41</TN> 
                        <TSA>
                            <TS>
                                <A>41</A> 
                            </TS>
                            <TS>
                                <A>42</A>  
                            </TS>
                            <TS>
                                <A>43</A> 
                            </TS>
                        </TSA>
                    </TPVS>
                </TPV>
            </KATU>
            <OBEC>
                <kod>553387</kod> 
                <name>mn</name> 
            </OBEC>
            <KATU>
                <KA>
                    <kod>k51</kod> 
                    <name>q51</name> 
                </KA>
                <TPV>
                    <TPVS>
                        <TN>VP51</TN> 
                        <TSA>
                            <TS>
                                <A>51</A> 
                            </TS>
                        </TSA>
                    </TPVS>
                </TPV>
            </KATU>
        </OBCE>
    </OKRESY>
</PV>

这是我的开始:

foreach ($xml->xpath("//KATU") as $ku) {
        print_r($ku);
        print "<hr />";
}

您需要读取每个节点,并检查该节点是否有子节点。然后循环通过它们。这里有一个链接到stackoverflow问题,我想它会回答你的问题。

或者你也可以检查这个和这个链接。查看其中人员的评论。

我希望你们能从这些链接中找到答案。