質問

私はHTMLコンテンツの answer このビットのXML:

<qa>
 <question>Who are you?</question>
 <answer>Who who, <strong>who who</strong>, <em>me</em></answer>
</qa>

していきたいなと思っていますの文字列"人人 <strong>人人</strong>, <em>me</em>".

している場合は、 answer として SimpleXMLElement, いき asXML() 取得"<answer>人人 <strong>人人</strong>, <em>me</em></answer>"などの内XMLの要素の要素自体に巻です。

内にあります。うになる文字列の機能も学び続けることできます。

役に立ちましたか?

解決

私の知識が作成されたものではありませんで取得する。されています。う SimpleDOM, るPHPのクラスの拡張SimpleXMLElementるには、便利なメソッドのほとんど共通の課題です。

include 'SimpleDOM.php';

$qa = simpledom_load_string(
    '<qa>
       <question>Who are you?</question>
       <answer>Who who, <strong>who who</strong>, <em>me</em></answer>
    </qa>'
);
echo $qa->answer->innerXML();

その他のいかない。最初のう変換します SimpleXMLElementDOMNode そしてループ間 childNodes の構築、形式をサポートしています。その他のう呼 asXML() を使用し文字列を除去する機能のルートノードです。注意が asXML() 場合があり戻して実際にマークアップ 外部 のノードと呼ばれいたことなどから、XML prolog処理に示します。

他のヒント

function SimpleXMLElement_innerXML($xml)
  {
    $innerXML= '';
    foreach (dom_import_simplexml($xml)->childNodes as $child)
    {
        $innerXML .= $child->ownerDocument->saveXML( $child );
    }
    return $innerXML;
  };

この作品はそうでもラーメ):

echo (string)$qa->answer;

最も簡単な解決導入することによって、現在カスタム車innerXML簡単なXML:

function simplexml_innerXML($node)
{
    $content="";
    foreach($node->children() as $child)
        $content .= $child->asXml();
    return $content;
}

コード交換 $body_content = $el->asXml();$body_content = simplexml_innerXML($el);

しかし、このままスイッチ他のAPIとの区別innerXMLお住まいのお客様はお問い合わせ用)outerXMLお住まいのお客様はお問い合わせ取得します。Microsoft Dom libaryには、この区別が、残念ながらPHPのDOMは来ない。

そのPHP XMLReader APIには、このdistintion.見readInnerXML().このAPIは非常に異なるアプローチ処理形式をサポートしています。アクセスすることとする。

最後に、ストレスとXMLを網羅するものではありませんデータを抽出してツなどの値です。だからこそ走るトラブルのAPIとなります。するのではない標準保存のHTMLサブツリーとしての価値を逃れ、すべてのタグではなくXML.にも注意する一部のHTML synthaxなXML対応(
vs,
).とにかく実務においては、アプローチはより便利に編集、xmlファイルです。

このSimpleXmlElementクラス:

class MyXmlElement extends SimpleXMLElement{

    final public function innerXML(){
        $tag = $this->getName();
        $value = $this->__toString();
        if('' === $value){
            return null;
        }
        return preg_replace('!<'. $tag .'(?:[^>]*)>(.*)</'. $tag .'>!Ums', '$1', $this->asXml());
    }
}

およびその利用でこのように:

echo $qa->answer->innerXML();
<?php
    function getInnerXml($xml_text) {           
        //strip the first element
        //check if the strip tag is empty also
        $xml_text = trim($xml_text);
        $s1 = strpos($xml_text,">");        
        $s2 = trim(substr($xml_text,0,$s1)); //get the head with ">" and trim (note that string is indexed from 0)

        if ($s2[strlen($s2)-1]=="/") //tag is empty
            return "";

        $s3 = strrpos($xml_text,"<"); //get last closing "<"        
        return substr($xml_text,$s1+1,$s3-$s1-1);
    }

    var_dump(getInnerXml("<xml />"));
    var_dump(getInnerXml("<xml  /  >faf <  / xml>"));
    var_dump(getInnerXml("<xml      ><  / xml>"));    
    var_dump(getInnerXml("<xml>faf <  / xml>"));
    var_dump(getInnerXml("<xml  >  faf <  / xml>"));      
?>

った後、検索したい満足します。で書いた自分なります。この関数の取得を正確に innerXml コンテンツ(ホワイト-スペース、コースを受講した。ご利用い、その結果、機能 asXML(), このよう getInnerXml($e->asXML()).この機能の仕事のための要素と多くの接頭辞として(私の場合、私が見つからない現在の方法と転換すべての子ノードの接頭辞).

出力:

string '' (length=0)    
string '' (length=0)    
string '' (length=0)    
string 'faf ' (length=4)    
string '  faf ' (length=6)
    function get_inner_xml(SimpleXMLElement $SimpleXMLElement)
    {
        $element_name = $SimpleXMLElement->getName();
        $inner_xml = $SimpleXMLElement->asXML();
        $inner_xml = str_replace('<'.$element_name.'>', '', $inner_xml);
        $inner_xml = str_replace('</'.$element_name.'>', '', $inner_xml);
        $inner_xml = trim($inner_xml);
        return $inner_xml;
    }

行わない場合はグレーのクラムシェル型クランプCDATAセクション、コメントアウトラインの6-8.

function innerXML($i){
    $text=$i->asXML();
    $sp=strpos($text,">");
    $ep=strrpos($text,"<");
    $text=trim(($sp!==false && $sp<=$ep)?substr($text,$sp+1,$ep-$sp-1):'');
    $sp=strpos($text,'<![CDATA[');
    $ep=strrpos($text,"]]>");
    $text=trim(($sp==0 && $ep==strlen($text)-3)?substr($text,$sp+9,-3):$text);
    return($text);
}

ご利用いただけるこの機能:)

function innerXML( $node )
{
    $name = $node->getName();
    return preg_replace( '/((<'.$name.'[^>]*>)|(<\/'.$name.'>))/UD', "", $node->asXML() );
}

利用の正規表現ができるようになるこ

preg_match(’/<answer(.*)?>(.*)?<\/answer>/’, $xml, $match);
$result=$match[0];
print_r($result);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top