स्ट्रिंग के लिए SimpleXml


जवाबों:


120

आप इसे SimpleXMLElement::asXML()पूरा करने के लिए विधि का उपयोग कर सकते हैं :

$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);

// The entire XML tree as a string:
// "<element><child>Hello World</child></element>"
$xml->asXML();

// Just the child node as a string:
// "<child>Hello World</child>"
$xml->child->asXML();

19
$string = $xml->child->__toString();
ल्यूक स्नोडेन

htmlspecialchars ($ xml-> asXML ())?
zloctb

1
लेकिन यो टैग के साथ छोड़ दिए जाते हैं, यदि आप टैग नहीं चाहते हैं तो क्या होगा? अन्य जवाब इस समस्या को हल करते हैं
एंड्रयू

63

आप कास्टिंग का उपयोग कर सकते हैं:

<?php

$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);

$text = (string)$xml->child;

$ पाठ 'हैलो वर्ल्ड' होगा


2
मेरे लिए काम करता है क्योंकि यह टैग में नहीं डालता है, धन्यवाद
एंड्रयू

16

वास्तव में asXML () स्ट्रिंग को xml में रूपांतरित करता है क्योंकि यह नाम कहता है:

<id>5</id>

यह सामान्य रूप से एक वेब पेज पर प्रदर्शित होगा, लेकिन जब आप कुछ और के साथ मूल्यों का मिलान करते हैं तो यह समस्या पैदा करेगा।

आप फ़ील्ड का वास्तविक मान प्राप्त करने के लिए strip_tags फ़ंक्शन का उपयोग कर सकते हैं:

$newString = strip_tags($xml->asXML());

पुनश्च: यदि आप पूर्णांक या फ्लोटिंग नंबरों के साथ काम कर रहे हैं, तो आपको इसे इंटीजर () या फ्लोटवल () के साथ पूर्णांक में बदलने की आवश्यकता है ।

$newNumber = intval(strip_tags($xml->asXML()));

15

आप इस asXMLविधि का उपयोग कर सकते हैं :

<?php

// string to SimpleXMLElement
$xml = new SimpleXMLElement($string);

// make any changes.
....

// convert the SimpleXMLElement back to string.
$newString = $xml->asXML();
?>

9

आप उपयोग कर सकते हैं ->childएक बच्चे तत्व नामित पाने के लिए बच्चे

इस तत्व में बच्चे का पाठ होगा तत्व ।

लेकिन अगर आप कोशिश करते हैं var_dump() उस चर पर , तो आप देखेंगे कि यह वास्तव में एक PHP स्ट्रिंग नहीं है।

इसके आस-पास सबसे आसान तरीका है एक प्रदर्शन करना strval(xml->child); कि इसे वास्तविक PHP स्ट्रिंग में बदल दिया जाएगा।

अपने XML को लूप करते समय और उपयोग करते समय डिबगिंग के समय यह उपयोगी है var_dump() परिणाम की जांच करने के लिए ।

तो $s = strval($xml->child);


4

यहाँ एक फ़ंक्शन है जिसे मैंने इस मुद्दे को हल करने के लिए लिखा है (यह मानते हुए टैग में कोई विशेषता नहीं है)। यह फ़ंक्शन HTML फॉर्मेटिंग नोड में रखेगा:

function getAsXMLContent($xmlElement)
{
  $content=$xmlElement->asXML();

  $end=strpos($content,'>');
  if ($end!==false)
  {
    $tag=substr($content, 1, $end-1);

    return str_replace(array('<'.$tag.'>', '</'.$tag.'>'), '', $content);
  }
  else
    return '';
}


$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);

echo getAsXMLContent($xml->child); // prints Hello World

1

कभी-कभी आप बस टाइपकास्ट कर सकते हैं:

// this is the value of my $xml
object(SimpleXMLElement)#10227 (1) {
  [0]=>
  string(2) "en"
}

$s = (string) $xml; // returns "en";

2
आरएसएस फ़ीड के विवरण क्षेत्र के लिए आपको इस तरह की वस्तु मिलती है। यह काउंटर-सहज है कि यह काम करता है, लेकिन यह यहां एकमात्र समाधान था जिसने मुझे अंदर स्ट्रिंग दिया $xmlitem->description। धन्यवाद।
हेनरिक एर्लडसन

0

संभवतः XML फ़ीड के आधार पर आपको उपयोग करने की आवश्यकता हो सकती है / नहीं __toString(); मुझे इसका उपयोग करना पड़ा __toString()अन्यथा यह स्ट्रिंग को एक SimpleXMLElement के अंदर लौटा रहा है। हो सकता है कि मुझे इस वस्तु को और नीचे लाने की आवश्यकता हो ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.