PHP SimpleXML得innerXML
質問
私は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();
その他のいかない。最初のう変換します SimpleXMLElement
へ DOMNode
そしてループ間 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);