[英]How to get CDATA texts from XML by id in tags
我知道如何使用PHP訪問XML中的標簽,但是這一次,我必須使用函數getText($textId)
來訪問那些標簽中的文本內容,但是我嘗試了很多事情,我迫切需要幫助。
我試過了
$doc->load("localisations_EN.xml");
$texts = $doc->getElementsByTagName("txt");
$elem = $doc->getElementById("home");
$children = $elem->childNodes;
foreach ($children as $child) {
if ($child->nodeType == XML_CDATA_SECTION_NODE) {
echo $child->textContent . "<br/>";
}
}
print_r($texts);
print_r($doc->getElementById('home'));
foreach ($texts as $text)
{
foreach($text->childNodes as $child) {
if ($child->nodeType == XML_CDATA_SECTION_NODE) {
echo $child->textContent . "<br/>";
}
}
}
然后我嘗試了這個,但是我不知道如何訪問字符串值
$xml=simplexml_load_file("localisations_EN.xml") or die("Error: Cannot create object");
print_r($xml);
$description = $xml->xpath("//txt[@id='home']");
var_dump($description);
我有這樣的東西
array(1){[0] => object(SimpleXMLElement)#2(1){[“” @attributes“] => array(1){[” id“] => string(4)” home“}}}
這是我必須使用的XML文件
<?xml version="1.0" encoding="UTF-8" ?>
<localisation application="test1">
<part ID="menu">
<txt id="home"><![CDATA[Home]]></txt>
<txt id="news"><![CDATA[News]]></txt>
<txt id="settings"><![CDATA[Settings]]></txt>
</part>
<part ID="login">
<txt id="id"><![CDATA[Login]]></txt>
<txt id="password"><![CDATA[Password]]></txt>
<txt id="forgetPassword"><![CDATA[Forget password?]]></txt>
</part>
</localisation>
謝謝你的幫助。
simplexml元素具有__toString()
魔術函數,該函數將返回元素的文本內容(但是,不是子元素的文本內容),因此您的simplexml代碼應為
$xml=simplexml_load_file("localisations_EN.xml");
$description = (string) $xml->xpath("//txt[@id='home']")[0];
// ^-- triggers __toString() ^-- xpath returns array
因為xpath返回一個元素數組,所以您需要獲取一個(或多個)並將其轉換為字符串。 獲取該元素的立即內容。
不知道為什么要去那里的(不存在的)子節點。 CDATA只是說“不要解析,這就是數據”的語法
$doc = new DOMDocument;
$doc->load("localisations_EN.xml");
$texts = $doc->getElementsByTagName('txt');
foreach($texts as $text) {
if($text->getAttribute('id') == 'home') {
// prepend hasAttribute('id') if needed to if clause above
$description = $text->textContent;
}
}
同樣,如果DTD將某些屬性設置為ID,則$doc->getElementById()
可能僅適用。 由於您的xml不能執行此操作(它沒有命名DTD),因此無法正常工作。
// $doc as before
$xpath = new DOMXPath($doc);
$description = $xpath->evaluate('//txt[@id="home"]')[0]->textContent;
// as before, xpath returns an array, that's why ---^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.