1

我已经找到了如何使用 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 文件可以在这里找到:

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

1 回答 1

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>

使用您提供的路径(item(0)、item(1) 等...)我想出了 value Vardas pavarde。在上面的W:t元素中。我在 XML 中采取的步骤如下。

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

获取此值的更简单方法是使用 XPATH。如果您对此有任何疑问,可以在此处阅读。这是一个涉及面很广的主题,所以我只想给你我认为你正在寻找的 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 会更直接一些。这是将 XPATH 与 SimpleXML 结合使用的链接。希望这可以帮助!

于 2012-05-15T14:12:56.893 回答