2017-05-25 4 views
1

私は、後でpタグを含むレベル(1,2,3)を含むdtbookのXMLを解析しようとしています。 PHP DOMでこれをやっています。 Link to XMLPHP DOMを使用してPCDATAと子要素を別々に解析するにはどうすればよいですか?

これらのpタグの内部には、noterefタグがあります。私はそれらを保有していますが、私が得ることができる唯一の結果は、noterefがpタグの前または後に現れることです。私はnoterefsのいくつかをpタグの内側に表示する必要があります。言い換えれば、彼らが実際にどこにいるのかということです。

<p>Special education for the ..... <noteref class="endnote" idref="fn_5" 
id="note5">5</noteref>. Interest ..... 19th century <noteref class="endnote" 
idref="fn_6" id="note6">6</noteref>.</p> 

これは今、pタグのコードです。この前に、私はdt-bookをループしてpタグを取得しています。それはうまく動作します。

if($level1->tagName == "p") { 
    echo "<p>".$level1->nodeValue; 
    $noterefs = $level1->childNodes; 
    foreach($noterefs as $noteref) { 
     if($noteref->nodeType == XML_ELEMENT_NODE) { 
      echo "<span><b>".$noteref->nodeValue."</b></span>"; 
     } 
    } 
    echo "</p><br>"; 
} 

これらは私が得る結果である:

..... 5.利息のための特別な教育..... 19世紀6.

特別教育...... 5.関心度..... 19世紀6.

私もしたいe pタグをにしないでください。 noterefタグ内の内容を表示してください。これは、noterefタグ(のみ)で行う必要があります。

だから、これらの問題を解決するために何ができるか分かっていますか?私はgoogledとほとんどすべてを試してみたように感じる。

答えて

0

DOMNode->nodeValue(PHPのDOMElementDOMNode->textContentと同じです)は、それ自身とそのすべての降順ノードからの完全なテキストコンテンツを含みます。または、もう少し簡単にする:ノードの完全な内容が含まれていますが、すべてのタグが削除されています。

あなたはおそらく試してみたいことは、次の(未テスト)のようなものです:

if($level1->tagName == "p") { 
    echo "<p>"; 
    // loop through all childNodes, not just noteref elements 
    foreach($level1->childNodes as $childNode) { 
     // you could also use if() statements here, of course 
     switch($childNode->nodeType) { 
     // if it's just text 
     case XML_TEXT_NODE: 
      echo $childNode->nodeValue; 
     break; 
     // if it's an element 
     case XML_ELEMENT_NODE: 
      echo "<span><b>".$childNode->nodeValue."</b></span>"; 
     break; 
     } 
    } 
    echo "</p><br>"; 
} 

は、これはまだかなり薄っぺらであることにかかわらず、注意してください。たとえば、<noteref>要素以外の要素が<p>要素に表示されている場合は、<span><b>要素にもラップされます。

うまくいけば、あなたの結果<p>の要素が子要素の内容も示した理由についてのヒントを与えてくれたらと思います。サイドノートとして


:何を達成したいことはHTMLまたは、おそらくいくつかの他のXML構造にXMLドキュメントの内容を変換であるならば、それは XSLTに見て完済することがあります。学習曲線が急峻であるかもしれないことに注意してください。

+1

ありがとう、それは完璧に働いた!そして、pタグにはnoterefsしか含まれていないので、問題はありません。 はい、私はXSLTで試してみましたが、その部分は完全に機能しました。しかし、JavaScriptを使って本のページをめくるようにするときに、私はいくつかの問題を抱えていたので、代わりにDOMで作業することにしました。 – lindastralberg

+0

@lindastralberg右折!それを聞いてうれしい助けた。 –

関連する問題