2015-03-25 103 views
3

我试图从Microsoft word文件创建xml文件。我将该文件保存为XML。但无法解析或获取内容。它显示如下PHP word xml解析

<wx:sect><w:p wsp:rsidR="00537F3C" wsp:rsidRPr="00616B5B" wsp:rsidRDefault="005F2CBA" wsp:rsidP="005F2CBA"><w:pPr><w:pStyle w:val="Contents"/></w:pPr><w:r wsp:rsidRPr="00616B5B"><w:t>Contents</w:t></w:r></w:p><w:p wsp:rsidR="001E54C8" wsp:rsidRDefault="001E54C8"><w:pPr><w:pStyle w:val="TOC2"/><w:rPr><w:rFonts w:ascii="Calibri" w:h-ansi="Calibri"/><wx:font wx:val="Calibri"/><w:b w:val="off"/><w:i-cs w:val="off"/><w:noProof/><w:kern w:val="0"/><w:sz w:val="22"/><w:sz-cs w:val="22"/></w:rPr></w:pPr><w:r><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:instrText> TOC \o "1-9" \t "ActHead 1,2,ActHead 2,2,ActHead 3,3,ActHead 4,4,ActHead 5,5, Schedule,2, Schedule Text,3, NotesSection,6" </w:instrText></w:r><w:r><w:fldChar w:fldCharType="separate"/></w:r><w:r><w:rPr><w:noProof/></w:rPr><w:t>Chapter 1—Introduction and core provisions</w:t></w:r> ..... 

如何获得像标题,小节,部分和其他内容。我试着用下面的代码

$xml = new DOMDocument(); 
    $xml->load('ITA97Vol01_1-36_WD02_2.xml'); 


    foreach($xml->getElementsByTagName('sect') as $child) { 
     echo "<pre>";print_R($child); 
     echo "</pre>"; 

    } 

是否有任何模式来获取所需的数据。帮我解决这个问题。

+0

教派是namesapace别名WX,尝试阅读其命名空间 – 2015-03-25 05:18:07

+0

@TomerW元素你能解释或任何示例代码先生 – Jegan 2015-03-25 05:34:38

+0

使用http://php.net/manual/en/domdocument.getelementsbytagnamens.php – 2015-03-25 06:01:37

回答

0

Tomer W建议用getElementsByTagNameNS函数取代getElementsByTagName。我无法从您的xml片段中告诉Word版本,但您需要wx:sect标签的命名空间。这样的地方在上面你的XML,你应该有xmlns:wx="http://schemas...." - 所以只是复制网址为基于NS标签名功能:

$xml = new DOMDocument(); 
$xml->load('ITA97Vol01_1-36_WD02_2.xml'); 


foreach($xml->getElementsByTagNameNS('http://schemas....','sect') as $child) { 
    echo "<pre>";print_R($child); 
    echo "</pre>"; 

} 

而使用的标题,我假设你指的是你在第一次使用的标题每节的行。标题也只是存储在普通的<w:t>...</w:t>标记中,因此您要么选择第一个出现的t元素,否则您必须先找到标题样式,然后在其中选择文本。

但是对于一个完整的解决方案,你将不得不挖掘整个文件,那里有很多垃圾,所以你应该只定位已知的元素/标签。