2015-02-11 86 views
0

我有以下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 />"; 
} 

回答

0

你需要閱讀每一個節點,並檢查該節點有一個子節點或不。然後通過它們循環。 Here是一個鏈接到stackoverflow問題,我認爲將回答你的問題。

或者你也可以檢查thisthis的鏈接。檢查他們中的人的評論。

我希望你會從這些鏈接中找到答案。

+0

Thx非常卡普里。我會在下班後檢查它 – porosman 2015-02-11 14:58:50

+0

目前,您的答案不僅僅是一系列鏈接。如果Stackoverflow上的其他問題已經對這個問題有了答案,請不要在這裏回答,因爲那麼問題應該以重複的方式關閉。如果沒有重複的帖子,請擴展此答案以包含解決問題的所有必要信息。 – 2015-02-11 15:13:02