プロが教える店舗&オフィスのセキュリティ対策術

<div class="c0">
<div class="c1">
<x10>AAAAAAAAAAAAAAAAAAAAAA</x10>
<div class="c11"><x11>BBBBBBBBBBBBBBBBBBBBB</x11></div>
<div class="c12"><x12>CCCCCCCCCCCCCCCCCCCCC</x12></div>
</div>
<div class="c2">
<x20>DDDDDDDDDDDDDDDDDDDD</x20>
</div>
</div>

の、AAAAAAAAAAAAAAAAAA「だけ」取りたい場合のXpath式を教えてください。

失敗例いろいろ:
//div[@class='c1'];
//div[@class='c0']/div[@class='c1' and @class!='c11' and @class!='c12' and @class!='c2']";
//div[@class='c0']/div[@class!='c11' and @class!='c12' and @class!='c2' and @class='c1']";
//div[@class='c0']/div[@class!='c11' and @class!='c12' and @class!='c2']";

困っています。よろしくおねがいいたします

質問者からの補足コメント

  • 早速のご回答ありがとうございます。が、例が間違っていましたすみません。

    AAAAAAAA…を取るのは変わらないのですが、
    タグに囲われているものと囲われていないものがあって、
    「.c1 以外のクラス配下のテキスト」は丸ごと除くやり方についてでした。

    <div class="c0">
    <div class="c1">
    AAAAAAAAAAAAAAAAAAAAAA
    <x10>AAAAAAAAAAAAAAAAAAAAAA</x10>
    <div class="c11"><x11>BBBBBBBBBBBBBBBBBBBBB</x11></div>
    <div class="c12"><x12>CCCCCCCCCCCCCCCCCCCCC</x12></div>
    </div>
    <div class="c2">
    <x20>DDDDDDDDDDDDDDDDDDDD</x20>
    </div>
    </div>

      補足日時:2015/01/30 22:07
  • できました!

    //div[@class='c1']/text()[string-length(normalize-space()) > 0]|//div[@class='c1]/x10/text()[string-length(normalize-space()) > 0]

    text()[string-length(normalize-space()) > 0]と、|(論理和)が決め手でした

      補足日時:2015/01/31 02:01

A 回答 (2件)

<div class="c1">直下の<x10>だけを取るなら


//div[@class="c1"]/x10

AAAAAAAAAAAAAAAAAA を含む文字列だけを取るなら
//text()[contains(.,"AAAAAAAAAAAAAAAAAA")]

AAAAAAAAAAAAAAAAAA だけを取るなら
//text()[.="AAAAAAAAAAAAAAAAAA")]
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございます。が、例が間違っていましたすみません。
containtsに「.」を指定できたり、text()は使えそうですね。参考に検証させていただきます。

お礼日時:2015/01/30 22:09

単純に,


//x10/text()
ではだめなのですか。


---- お試し ----
<?php

$xml = <<<'EOT'
<div class="c0">
<div class="c1">
<x10>AAAAAAAAAAAAAAAAAAAAAA</x10>
<div class="c11"><x11>BBBBBBBBBBBBBBBBBBBBB</x11></div>
<div class="c12"><x12>CCCCCCCCCCCCCCCCCCCCC</x12></div>
</div>
<div class="c2">
<x20>DDDDDDDDDDDDDDDDDDDD</x20>
</div>
</div>
EOT;

$doc = new DOMDocument();
if (!$doc->loadXML($xml)) {
die;
}
$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//x10/text()');
if ($nodes === false || $nodes->length !== 1) {
die;
}
echo '<' . $nodes->item(0)->wholeText . '>' . PHP_EOL;
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございます。が、例が間違っていましたすみません。
wholeText 初耳でして感謝します。上にも書きましたがtext()は使えそうですね。参考に検証させていただきます。

お礼日時:2015/01/30 22:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!