2012-05-14 48 views
1

我已經找到了如何使用PHP DOM替換具有PHP字符串的特定節點值,現在我需要將這些XML值打印到表單字段中。對於替換我使用這個PHP代碼,並可能在某種程度上我可以修改打印特定值這個代碼,因爲這個XML文件是很複雜的在PHP中打印特定的XML節點值(1)

$file = "../word/document.xml";            
    $fp = fopen($file, "rb") or die("error"); 
    $str = fread($fp, filesize($file)); 
    $xml = new DOMDocument();         
    $xml->formatOutput = true; 
    $xml->preserveWhiteSpace = false; 
    $xml->loadXML($str) or die("Error"); 

    $root = $xml->documentElement; 
    $fnode = $root->childNodes->item(0); 

    $ori = $fnode->childNodes->item(1);      
    $ori1 = $ori->childNodes->item(3); 
    $ori2 = $ori1->childNodes->item(1); 
    $ori3 = $ori2->childNodes->item(1); 
    $ori4 = $ori3->childNodes->item(1); 
    $ori5 = $ori4->childNodes->item(1); 

     $wt  = $xml->createElement("w:t"); 
    $wtText = $xml->createTextNode("".$name." ".$surname.""); 
    $wt->appendChild($wtText); 
     $ori4->replaceChild($wt,$ori5); 
     $xml->save("../word/document.xml"); 

我需要達到相同的值($ ori5)和打印以形成領域,但我不知道如何做到這一點。

XML文件可以發現here

<w:document mc:Ignorable="w14 wp14"> 
    <w:body> 
     <w:tbl> 
      <w:tr w:rsidR="000171B5" w:rsidTr="00272F6E"> 
       <w:tc> 
        <w:p w:rsidR="000171B5" w:rsidRPr="00075BEA" w:rsidRDefault="000171B5" w:rsidP="000171B5"> 
         <w:r w:rsidRPr="00075BEA"> 
          <w:t>Vardas pavarde</w:t> 
         </w:r> 
        </w:p> 
       </w:tc> 
      </w:tr> 
     </w:tbl> 
    </w:body> 
</w:document> 
+0

認爲最好包含您的XML樣本的樣本。你可以更好地解析你的XML,並且我們能夠更好地幫助你獲得這些信息。至於你的問題,我很困惑,你是否正在尋找一種更好的方式來完成你已經在做的事情,或者一種將XML值輸出到HTML表單的方法? – mseancole

+0

編輯我的帖子。 –

+0

如果你有一個複雜的XML結構,也許你應該考慮使用XPath來獲取值,DOM可能會很痛苦 –

回答

0

對不起,我沒能得到這個昨晚,但是我能得到你的XML一起工作的副本。將來,請僅提供您正在使用的XML樣本。特別是因爲你提供的那個沒有格式化。我花了更長的時間格式化到我需要的地方,而不是我回答這個問題。而大多數人只會放棄它而不是深入研究。以下是採樣後與問題相關的格式化XML。

<w:document mc:Ignorable="w14 wp14"> 
    <w:body> 
     <w:tbl> 
      <w:tr w:rsidR="000171B5" w:rsidTr="00272F6E"> 
       <w:tc> 
        <w:p w:rsidR="000171B5" w:rsidRPr="00075BEA" w:rsidRDefault="000171B5" w:rsidP="000171B5"> 
         <w:r w:rsidRPr="00075BEA"> 
          <w:t>Vardas pavarde</w:t> 
         </w:r> 
        </w:p> 
       </w:tc> 
      </w:tr> 
     </w:tbl> 
    </w:body> 
</w:document> 

使用你提供的路徑(項目(0),項目(1),等...),我想出了價值Vardas pavarde。這在上面的W:t元素中。下面是我在XML中採取的步驟。

0 /1 /3 /1 /1/1/1 
body/tbl/tr/tc/p/r/t = Vardas pavarde 

獲取此值的更簡單方法是使用XPATH。如果您對此有任何疑問,您可以閱讀它here。這是一個覆蓋面很廣的主題,所以我只是想給你提供我認爲你正在尋找的XPATH。如果它不是你正在尋找的東西,你將不得不調整它,只是使用它的鏈接非常簡單。

$path = '//body/tbl/tr/tc/p/r/t'; 

因此,加載您的DOMDocument後添加以下內容。

$xpath = new DOMXpath($xml); 
$path = '//body/tbl/tr/tc/p/r/t'; 
$elements = $xpath->query($path); 

由於XPATH返回結果數組,您必須將其轉儲以找到您要查找的特定索引。但在這種情況下,它應該是$elements[1],因爲在您正在查找的路徑之前只有一個與該路徑匹配的其他元素。所以...

$ori5 = $elements[1]; 

另外,您可能要考慮使用SimpleXML來讀取XML。如果您正在編輯DOM,那麼DOM很不錯,但是如果您需要閱讀它,SimpleXML會更簡單一些。 Here's在SimpleXML中使用XPATH的鏈接。希望這可以幫助!