2011-09-13 21 views
1

php DOMクラスを使用してXML文書から特定のノードの値(テキスト)を取得しようとしていますが、その子孫と合併した。php DOMを使用して特定のノードテキストを取得する方法

のは、私は、この文書から取得する必要があると仮定してみましょう:

<?xml version="1.0"?> 
<trees> 
    LarchRedwoodChestnutBirch 
    <trimmed>Larch</trimmed> 
    <trimmed>Redwood</trimmed> 
</trees> 

をそして私が手:

LarchRedwoodChestnutBirchLarchRedwood 

あなたは私が作ったサブLarchRedwoodを削除することができないことがわかりますがトリミングされた木は全文からしか得られないのでChestnutBirchそれは私が必要なものではありません。

いずれかをお勧めしますか? (Thanx)

答えて

0

ノードのテキストコンテンツを取得するには、$node->nodeValueを使用します。 $node->textContentを使用すると、現在のノードとすべての子ノードからすべてのテキストが取得されます。 (大文字によって)別々の単語に "LarchRedwoodChestnutBirch" を分割する

<?xml version="1.0"?> 
<trees> 
    <tree>Larch</tree> 
    <tree>Redwood</tree> 
    <tree>Chestnut</tree> 
    <tree>Birch</tree> 
</trees> 

、あなた」:

1

あなたは理想的には、XMLのあるべきtrimmedノード

$doc = new DOMDocument('1.0', 'utf-8'); 
$doc->loadXML($xml); 

$xpath = new DOMXpath($doc); 
$trees = $doc->getElementsByTagName('trees')->item(0); 
foreach ($xpath->query('/trees/*') as $node) 
{ 
    $trees->removeChild($node); 
} 
echo $trees->textContent; 
echo $trees->nodeValue; 
3

私はそれを得ました。あなたはそれが自分自身でその子ノードを解析する際に、あなたが何のtagNameをを取得していない場合

function specificNodeValue($node, $implode = true) { 
    $value = array(); 
    if ($node->childNodes) { 
    for ($i = 0; $i < $node->childNodes->length; $i++) { 
     if (!(@$node->childNodes->item($i)->tagName)) { 
     $value[] = $node->childNodes->item($i)->nodeValue; 
     } 
    } 
    } 
    return (is_string($implode) ? implode($implode, $value) : ($implode === true ? implode($value) : $value)); 
} 

与えられたノードは、根のようなものですので、その子ノードの値は、それはそれ自身の値である:これは動作します。
不正な形式のXML文書の中に、ノードは多くの値を持つことができ、すべてを配列に入れてノードの値全体を取得できます。
上記の関数を使用して、サブノード値をマージしないで、必要なノード値を取得します。

パラメータは以下のとおりです。
$ノード(必須)あなたは(デフォルトではtrue)文字列を取得したい場合DOMElementのオブジェクト
$の破(オプション)でなければならないか、配列(偽)の多くの部分で構成されました値。 ("グルー"文字列を使用して配列を暗示する場合は、ブール値の代わりに文字列を設定します)。

関連する問題