更换
<text:p >Lorem<text:s/>ipsum.</text:p>
所以我使用的XMLReader。几乎所有事情都在按需要工作。但是<文本:s /> - 元素给我带来了一些麻烦。 当我想删除格式化标签(即粗体)我使用expand()->textContent
得到公正的文字:
$reader = new XMLReader();
if (!$reader->open("content.xml");
while ($reader->read()) {
if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name === 'text:p') echo utf8_decode($reader->expand()->textContent);
}
在这种情况下,我会得到“Loremipsum。”而不是'Lorem ipsum。'。我如何用空格替换每个<文本:s/>。
更新: 我这样做的:preg_replace("/<\\/?text:s(\\s+.*?>|>)/", " ", utf8_decode($reader->readInnerXML()))
更新:
如果我使用DOM文档进行解析,怎么办我必须要改变的语法?
$reader = new DOMDocument();
$reader->load("zip://folder/".$file.".odt#content.xml");
while ($reader->read()){
if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name === 'text:h') {
if ($reader->getAttribute('text:outline-level')=="2") $html .= '<h2>'.$reader->expand()->textContent.'</h2>';
}
elseif ($reader->nodeType == XMLREADER::ELEMENT && $reader->name === 'text:p') {
if ($reader->getAttribute('text:style-name')=="Standard") {
$str = $reader->readInnerXML();
// replace text:s-elements with " " at this point
}
}
}
尝试'$ string = str_replace(“ ”,“”,$ string);'或'$ string = str_replace(“ ”,“\ n”,$ string);' –
2014-11-01 00:17:56
'expand() - > textContent'导致一个没有其他标签的字符串。所以文本:s-tag已经在if子句中被删除了。这是我的问题... – user3142695 2014-11-01 00:25:17
然后尝试'echo utf8_decode($ reader-> expand() - > textContent)。 “”;'或'echo utf8_decode($ reader-> expand() - > textContent)。 “\ n”;' - 或放置'。 “”在结束括号内。 – 2014-11-01 00:29:24