【问题标题】:PHP - XPATH request on XML file - childrens and siblingsPHP - XML 文件上的 XPATH 请求 - 子级和兄弟级
【发布时间】:2015-02-11 14:37:30
【问题描述】:

我有以下 XML 文档,我需要从中获取每个节点的子节点(///...)。为了更好地理解,这是我需要的:

<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 的值)是我需要获取的节点不是子节点,而是按顺序排列的兄弟节点 .. .

所以我需要找到所有的节点(的子节点)然后得到它的顶部兄弟(意味着他的父母顶部兄弟是)得到/

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

感谢回复

这是我的 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 />";
}

【问题讨论】:

    标签: php xml xpath siblings descendant


    【解决方案1】:

    您需要读取每个节点并检查该节点是否有子节点。然后遍历它们。 Here 是指向 stackoverflow 问题的链接,我认为它会回答您的问题。

    或者您也可以查看thisthis 链接。检查里面的人的cmets。

    希望您能从这些链接中找到答案。

    【讨论】:

    • 目前,您的答案不过是链接的集合。如果 Stackoverflow 上的其他问题已经有这个问题的答案,请不要在这里回答,因为这样问题应该作为重复关闭。如果没有重复的帖子,请扩展此答案以包含解决问题所需的所有信息。
    猜你喜欢
    • 1970-01-01
    • 2021-04-21
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 2015-04-03
    相关资源
    最近更新 更多