Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHPDOM获取特定的节点文本_Php_Xml_Dom_Text - Fatal编程技术网

如何使用PHPDOM获取特定的节点文本

如何使用PHPDOM获取特定的节点文本,php,xml,dom,text,Php,Xml,Dom,Text,我试图使用PHPDOM类从xml文档中获取特定节点的值(文本),但我无法正确地获取该值,因为我将该节点的文本内容与其子节点合并 假设我需要从该文档中获取树: <?xml version="1.0"?> <trees> LarchRedwoodChestnutBirch <trimmed>Larch</trimmed> <trimmed>Redwood</trimmed> </trees> 你可以看到

我试图使用PHPDOM类从xml文档中获取特定节点的值(文本),但我无法正确地获取该值,因为我将该节点的文本内容与其子节点合并

假设我需要从该文档中获取树:

<?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)。(如果希望使用“粘合”字符串内爆数组,请设置字符串而不是布尔值)