在PHP中打印特定的XML节点值(1)

时间:2012-05-14 18:28:35

标签: php xml

我已经找到了如何使用PHP DOM用PHP字符串替换特定节点值,现在我需要将这些XML值打印到表单字段中。为了替换我使用这个PHP代码,并且可能以某种方式我可以修改此代码以打印特定值,因为这个XML文件非常复杂

$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>

1 个答案:

答案 0 :(得分: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是好的,如果你正在编辑它,你似乎在这里做,但如果你需要阅读它,SimpleXML更直接。 Here's使用XPATH和SimpleXML的链接。希望这有帮助!