PHP - 对XML文件的XPATH请求 - 子对象和兄弟

PHP - 对XML文件的XPATH请求 - 子对象和兄弟

问题描述:

我有以下XML文档,我需要为每个节点获得他的孩子(< KA>/< kod>和< TPV>/< TPV>/... < A>)。为了更好地理解,这里就是我需要:PHP - 对XML文件的XPATH请求 - 子对象和兄弟

<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的孩子> <热塑性硫化弹性体> < TSA> < TS>),然后获取其顶部兄弟姐妹(意思是他的父母< TPV>兄弟姐妹是< KA>)得到< 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 />"; 
} 

你需要阅读每一个节点,并检查该节点有一个子节点或不。然后通过它们循环。 Here是一个链接到stackoverflow问题,我认为将回答你的问题。

或者你也可以检查thisthis的链接。检查他们中的人的评论。

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

+0

Thx非常卡普里。我会在下班后检查它 – porosman 2015-02-11 14:58:50

+0

目前,您的答案不仅仅是一系列链接。如果Stackoverflow上的其他问题已经对这个问题有了答案,请不要在这里回答,因为那么问题应该以重复的方式关闭。如果没有重复的帖子,请扩展此答案以包含解决问题的所有必要信息。 – 2015-02-11 15:13:02