我已经找到了如何使用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>
答案 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的链接。希望这有帮助!