3

我已将 word 文档转换为 xml 文件,这是该文件的一部分:

<w:tc>
    <w:tcPr>
        <w:tcW w:w="2130" w:type="dxa"/>
    </w:tcPr>
    <w:p w:rsidR="00255D05" w:rsidRPr="00FF409F" w:rsidRDefault="00255D05" w:rsidP="00D041E7">
        <w:pPr>
            <w:rPr>
                <w:rFonts w:hint="cs"/>
                <w:sz w:val="36"/>
                <w:szCs w:val="36"/>
                <w:rtl/>
                <w:lang w:bidi="ar-JO"/>
            </w:rPr>
        </w:pPr>
        <w:r w:rsidRPr="00FF409F">
            <w:rPr>
                <w:rFonts w:hint="cs"/>
                <w:sz w:val="36"/>
                <w:szCs w:val="36"/>
                <w:rtl/>
                <w:lang w:bidi="ar-JO"/>
            </w:rPr>
            <w:t>myWantedText</w:t>
        </w:r>
    </w:p>
</w:tc>

我正在尝试获取“myWantedText”的值,到目前为止我已经尝试过:

$xml = new SimpleXMLElement($fileContents);
foreach($xml->xpath('//w:t') as $t) {
    var_dump($t);
}

但我得到的只是一拳object(SimpleXMLElement)[2]

4

2 回答 2

2

在输入 XML 中缺少名称空间和 Stuart 指出的声明。下面是您的 XML,带有正确的Word XML Namespace

<?php

$str = <<<XML
<?xml version="1.0" standalone="yes"?>
<w:tc xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <w:tcPr>
        <w:tcW w:w="2130" w:type="dxa"/>
    </w:tcPr>
    <w:p w:rsidR="00255D05" w:rsidRPr="00FF409F" w:rsidRDefault="00255D05" w:rsidP="00D041E7">
        <w:pPr>
            <w:rPr>
                <w:rFonts w:hint="cs"/>
                <w:sz w:val="36"/>
                <w:szCs w:val="36"/>
                <w:rtl/>
                <w:lang w:bidi="ar-JO"/>
            </w:rPr>
        </w:pPr>
        <w:r w:rsidRPr="00FF409F">
            <w:rPr>
                <w:rFonts w:hint="cs"/>
                <w:sz w:val="36"/>
                <w:szCs w:val="36"/>
                <w:rtl/>
                <w:lang w:bidi="ar-JO"/>
            </w:rPr>
            <w:t>myWantedText</w:t>
        </w:r>
    </w:p>
</w:tc>
XML;

$xml = new SimpleXMLElement($str);
$xml->registerXPathNamespace('w', 'http://schemas.microsoft.com/office/word/2003/wordml');
foreach($xml->xpath('//w:t') as $t) {
    var_dump($t);
}
?>

输出:

object(SimpleXMLElement)#2 (1) {
  [0]=>
  string(12) "myWantedText"
}

你可以在这里看到这个工作:http: //codepad.org/YRIO6uk3

于 2013-09-23T05:29:11.627 回答
0

问题是字符“:”搞乱了对 xpath 的调用。

作为一种解决方法,您可以执行以下操作:

<?php

$str = <<<XML
<?xml version="1.0" standalone="yes"?>
<w:tc>
    <w:tcPr>
        <w:tcW w:w="2130" w:type="dxa"/>
    </w:tcPr>
    <w:p w:rsidR="00255D05" w:rsidRPr="00FF409F" w:rsidRDefault="00255D05" w:rsidP="00D041E7">
        <w:pPr>
            <w:rPr>
                <w:rFonts w:hint="cs"/>
                <w:sz w:val="36"/>
                <w:szCs w:val="36"/>
                <w:rtl/>
                <w:lang w:bidi="ar-JO"/>
            </w:rPr>
        </w:pPr>
        <w:r w:rsidRPr="00FF409F">
            <w:rPr>
                <w:rFonts w:hint="cs"/>
                <w:sz w:val="36"/>
                <w:szCs w:val="36"/>
                <w:rtl/>
                <w:lang w:bidi="ar-JO"/>
            </w:rPr>
            <w:t>myWantedText</w:t>
        </w:r>
    </w:p>
</w:tc>
XML;

$xml = new SimpleXMLElement($str);
$result = $xml->xpath('/*');
echo $result[0]->p->r->t;
?>

输出:

myWantedText

更新:
乐高的答案比这个解决方法更好!

于 2013-09-22T16:51:09.563 回答