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)など)を使用して、値を考え出しました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]は、探しているパスの前にそのパスに一致する要素が他に1つしかないためです。それで...

$ori5 = $elements[1];

また、XMLの読み取りにSimpleXMLの使用を検討することもできます。DOMは、ここで行っているように編集している場合に適していますが、読む必要がある場合は、SimpleXMLの方がもう少し簡単です。SimpleXMLでXPATHを使用するためのリンクは次のとおりです。お役に立てれば!

于 2012-05-15T14:12:56.893 に答える