我将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>
我正试图获得&#39; myWantedText&#39;的价值,到目前为止我已尝试过:
$xml = new SimpleXMLElement($fileContents);
foreach($xml->xpath('//w:t') as $t) {
var_dump($t);
}
但我得到的只是object(SimpleXMLElement)[2]
答案 0 :(得分:2)
你缺少namespace in the input 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
答案 1 :(得分: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
<强>更新强>
Lego's answer比这项工作更好!