PHP使用simplexml检索xml节点值

PHP使用simplexml检索xml节点值,php,simplexml,Php,Simplexml,可能重复: 我见过其他与simplexml和节点值相关的问题,但找不到我问题的答案 我有一个PHP变量,其中包含如下格式的xml文档: <div id="container"> <div id="header"></div> <div id="main"> ##CONTENTS## cd <strong>dscsdcsd</strong> sdcsc <div>my content here&l

可能重复:

我见过其他与simplexml和节点值相关的问题,但找不到我问题的答案

我有一个PHP变量,其中包含如下格式的xml文档:

<div id="container">
<div id="header"></div>
<div id="main">
      ##CONTENTS## cd <strong>dscsdcsd</strong> sdcsc
  <div>my content here</div>
  <span>and there</span>
    </div>
<div id="footer"> </div>
</div>
有人能告诉我如何只获取节点值(不使用xpath)

说清楚,现在我得到:

<div id="main">
      ##CONTENTS## cd <strong>dscsdcsd</strong> sdcsc
      <div>my content here</div>
      <span>and there</span>
</div>

##目录##cdDSCSDsdcsc
我的内容在这里
在那里
我只想:

      ##CONTENTS## cd <strong>dscsdcsd</strong> sdcsc
      <div>my content here</div>
      <span>and there</span>
##目录##cdDSCSDsdcsc
我的内容在这里
在那里

非常感谢

正如@Tomalak所建议的,这是 而且您不能做得比simplexml API建议的更好

function simplexml_innerXML($xml)
{
    $content="";
    foreach($node->children() as $child)
        $content .= $child->asXml();
    return $content;
}
在代码中,替换
$body\u content=$el->asXml()带有
$body\u content=simplexml\u innerXML($el)


然而,您也可以切换到另一个API,它区分了
innerXML
(您正在寻找的内容)和
outerXML
(您现在得到的内容)。Microsoft Dom库提供了这种区别,但不幸的是PHP Dom没有

我发现
PHPxmlReaderAPI
提供了这种区分。看见尽管这个API有一种完全不同的处理XML的方法。试试看



最后,我要强调,XML并不是要将数据提取为子树,而是作为值。这就是为什么找不到合适的API的原因。将HTML子树存储为一个值(并转义所有标记)而不是XML子树将更为“标准”。还要注意的是,某些HTML synthax并不总是与XML兼容(即

与,
)。无论如何,在实践中,编辑xml文件肯定更方便。

正如@Tomalak所建议的,这是 而且您不能做得比simplexml API建议的更好

function simplexml_innerXML($xml)
{
    $content="";
    foreach($node->children() as $child)
        $content .= $child->asXml();
    return $content;
}
在代码中,替换
$body\u content=$el->asXml()带有
$body\u content=simplexml\u innerXML($el)


然而,您也可以切换到另一个API,它区分了
innerXML
(您正在寻找的内容)和
outerXML
(您现在得到的内容)。Microsoft Dom库提供了这种区别,但不幸的是PHP Dom没有

我发现
PHPxmlReaderAPI
提供了这种区分。看见尽管这个API有一种完全不同的处理XML的方法。试试看



最后,我要强调,XML并不是要将数据提取为子树,而是作为值。这就是为什么找不到合适的API的原因。将HTML子树存储为一个值(并转义所有标记)而不是XML子树将更为“标准”。还要注意的是,某些HTML synthax并不总是与XML兼容(即

与,
)。无论如何,在实践中,编辑xml文件肯定更方便。

“节点值”是一个模棱两可的术语。您要求的是innerXML,而nodeValue通常指的是没有XML标记的内部文本。@Tomalak>事实上是这样的。对不起@lenzai>是的,但是,我不明白为什么simplexml作为一个没有方法来获取包含xml值的innerXml。“节点值”是一个模棱两可的术语。您要求的是innerXML,而nodeValue通常指的是没有XML标记的内部文本。@Tomalak>事实上是这样的。对不起@lenzai>是的,但是,我不明白为什么simplexml作为没有方法来获取内部包含xml值的innerXml。谢谢,我会尝试一下,但我可能会使用simplexml,在另一个线程中提到的SimpleDOM外部库。readInnerXML()使用PHP5.2,因为simplexml只使用PHP5。我需要的应用程序是通用的我是建议他们的第二个选择与自定义迭代。请参阅我上面的更新。我在alsoThanks发布了解决方案,我将尝试一下,但我可能会使用simplexml,即另一个线程中提到的SimpleDOM外部库。readInnerXML()使用PHP5.2,因为simplexml只使用PHP5。我需要的应用程序是通用的我是建议他们的第二个选择与自定义迭代。请参阅上面的更新。我还将解决方案发布在