2012-08-15 133 views
2

我想解析从word2003 xml文件到XML的XML数据。所以,我没有阅读没有解决我的问题不幸的是,文件的所有结构都有命名空间,我不能进入它们解析。我发现并阅读了很多关于创建命名空间数据的文章,但它并没有为我清除任何内容。xml - 如何解析xml命名空间从word文档到php

我的XML文件看起来像这样:

[...] 
<w:body> 
    <w:p wsp:rsidR="00FC2E4E" wsp:rsidRPr="00FC2E4E" wsp:rsidRDefault="00ED100D" wsp:rsidP="00FC2E4E"> 
     <w:pPr> 
      <w:spacing w:line="240" w:line-rule="auto"/> 
      <w:ind w:left="-1134"/> 
      <w:jc w:val="both"/> 
      <w:rPr> 
       <w:noProof/> 
       <w:sz w:val="26"/> 
       <w:sz-cs w:val="26"/> 
       <w:lang w:val="PL"/> 
      </w:rPr> 
     </w:pPr> 
     <w:r wsp:rsidR="00FC2E4E" wsp:rsidRPr="00FC2E4E"> 
      <w:rPr> 
       <w:noProof/> 
       <w:sz w:val="26"/> 
       <w:sz-cs w:val="26"/> 
       <w:lang w:val="PL"/> 
      </w:rPr> 
      <w:t> 
          THIS IS MY SEARCH STRING 
      </w:t> 
     </w:r> 
    </w:p> 
</w:body> 

我也有我的PHP文件:

if (file_exists('file.xml')) { 
    $xml = simplexml_load_file('file.xml'); 
foreach($xml->children() as $child) { 
    echo '|' . $child->getName(); <--- this returns nothing! 
} 

    [...do some modification...] 
    $xml->saveXML('/stworz/dupa.xml'); 
} else { 
    exit('Failed to open file.xml.'); 
} 

我想改变XML的内容(这是我的搜索字符串),另一个值,还是删除它,并把整个新的价值?我怎样才能进入隐藏在命名空间标记中的文本? 请注意,即使是根标记也是命名空间!

提前帮助。

+0

[SimpleXMLElement :: children()](http://php.net/simplexmlelement.children)。 – salathe 2012-08-15 19:48:36

+0

我用过的孩子就像你可以在我编辑的帖子中看到的..它返回空stinrg – Kalreg 2012-08-15 19:50:23

+0

有[PHPWord](http://phpword.codeplex.com)。 – 2012-08-15 19:57:27

回答

0

此代码工程,但它引发了一堆警告。您也许可以使用PHPWord

<?php 
if(file_exists('test.xml')) { 
    $xml = new DOMDocument(); 
    $xml->load('test.xml'); 
    foreach($xml->getElementsByTagName('t') as $child) { 
     echo '|' . $child->nodeValue; 
    } 
    echo $xml->saveXML(); 
} else { 
    exit('Failed to open file.xml.'); 
} 
?>