如何使用PHPDOM获取特定的节点文本
我试图使用PHPDOM类从xml文档中获取特定节点的值(文本),但我无法正确地获取该值,因为我将该节点的文本内容与其子节点合并 假设我需要从该文档中获取树:如何使用PHPDOM获取特定的节点文本,php,xml,dom,text,Php,Xml,Dom,Text,我试图使用PHPDOM类从xml文档中获取特定节点的值(文本),但我无法正确地获取该值,因为我将该节点的文本内容与其子节点合并 假设我需要从该文档中获取树: <?xml version="1.0"?> <trees> LarchRedwoodChestnutBirch <trimmed>Larch</trimmed> <trimmed>Redwood</trimmed> </trees> 你可以看到
<?xml version="1.0"?>
<trees>
LarchRedwoodChestnutBirch
<trimmed>Larch</trimmed>
<trimmed>Redwood</trimmed>
</trees>
你可以看到,我不能从整篇文章中删除修剪过的树木所形成的子串LarchRedwood,因为我只会得到ChestnutBirch,而这不是我所需要的
有什么建议吗?(Thanx)使用
$node->nodeValue
获取节点的文本内容。如果使用$node->textContent
,则会从当前节点和所有子节点获取所有文本。使用$node->nodeValue
获取节点的文本内容。如果使用$node->textContent
,则会从当前节点和所有子节点获取所有文本。您可以尝试删除修剪的节点
$doc = new DOMDocument('1.0', 'utf-8');
$doc->loadXML($xml);
$xpath = new DOMXpath($doc);
$trees = $doc->getElementsByTagName('trees')->item(0);
foreach ($xpath->query('/trees/*') as $node)
{
$trees->removeChild($node);
}
echo $trees->textContent;
echo $trees->nodeValue;
您可以尝试删除trimmed
节点
$doc = new DOMDocument('1.0', 'utf-8');
$doc->loadXML($xml);
$xpath = new DOMXpath($doc);
$trees = $doc->getElementsByTagName('trees')->item(0);
foreach ($xpath->query('/trees/*') as $node)
{
$trees->removeChild($node);
}
echo $trees->textContent;
echo $trees->nodeValue;
理想情况下,XML应该是:
<?xml version="1.0"?>
<trees>
<tree>Larch</tree>
<tree>Redwood</tree>
<tree>Chestnut</tree>
<tree>Birch</tree>
</trees>
落叶松
红杉
栗树
桦木
要将“LarchRedwoodChestnutBirch”拆分为单独的单词(大写),您需要使用PHP的“PCRE”函数:
“希望有帮助 理想情况下,XML应该是:
<?xml version="1.0"?>
<trees>
<tree>Larch</tree>
<tree>Redwood</tree>
<tree>Chestnut</tree>
<tree>Birch</tree>
</trees>
落叶松
红杉
栗树
桦木
要将“LarchRedwoodChestnutBirch”拆分为单独的单词(大写),您需要使用PHP的“PCRE”函数:
“希望有帮助 我明白了。这项工作:
function specificNodeValue($node, $implode = true) {
$value = array();
if ($node->childNodes) {
for ($i = 0; $i < $node->childNodes->length; $i++) {
if (!(@$node->childNodes->item($i)->tagName)) {
$value[] = $node->childNodes->item($i)->nodeValue;
}
}
}
return (is_string($implode) ? implode($implode, $value) : ($implode === true ? implode($value) : $value));
}
function specificNodeValue($node,$infrade=true){
$value=array();
如果($node->childNodes){
对于($i=0;$i<$node->childNodes->length;$i++){
if(!(@$node->childNodes->item($i)->标记名)){
$value[]=$node->childNodes->item($i)->nodeValue;
}
}
}
返回(is_string($inpolde)?inpolde($inpolde,$value):($inpolde==true?inpolde($value):$value));
}
给定的节点类似于根节点,如果在解析其子节点时没有标记名,那么它就是它自己,因此该子节点的值就是它自己的值。
在格式错误的xml文档中,一个节点可能有许多值,将它们全部放入一个数组中,以获得该节点的全部值。
使用上面的函数获取所需的节点值,而不合并子节点值
参数为:
$node(必需)必须是DomeElement对象
$implode(可选)如果要获取由多个值组成的字符串(默认为true)或数组(false)。(如果希望使用“粘合”字符串对数组进行内爆,请设置一个字符串而不是布尔值)。我知道了。这项工作:
function specificNodeValue($node, $implode = true) {
$value = array();
if ($node->childNodes) {
for ($i = 0; $i < $node->childNodes->length; $i++) {
if (!(@$node->childNodes->item($i)->tagName)) {
$value[] = $node->childNodes->item($i)->nodeValue;
}
}
}
return (is_string($implode) ? implode($implode, $value) : ($implode === true ? implode($value) : $value));
}
function specificNodeValue($node,$infrade=true){
$value=array();
如果($node->childNodes){
对于($i=0;$i<$node->childNodes->length;$i++){
if(!(@$node->childNodes->item($i)->标记名)){
$value[]=$node->childNodes->item($i)->nodeValue;
}
}
}
返回(is_string($inpolde)?inpolde($inpolde,$value):($inpolde==true?inpolde($value):$value));
}
给定的节点类似于根节点,如果在解析其子节点时没有标记名,那么它就是它自己,因此该子节点的值就是它自己的值。
在格式错误的xml文档中,一个节点可能有许多值,将它们全部放入一个数组中,以获得该节点的全部值。
使用上面的函数获取所需的节点值,而不合并子节点值
参数为:
$node(必需)必须是DomeElement对象
$implode(可选)如果要获取由多个值组成的字符串(默认为true)或数组(false)。(如果希望使用“粘合”字符串内爆数组,请设置字符串而不是布尔值)