首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP从XML中删除空标记

使用PHP从XML中删除空标记
EN

Stack Overflow用户
提问于 2011-12-22 19:28:31
回答 5查看 14.1K关注 0票数 10

问题

如何在PHP中删除空的xml标记?

示例:

代码语言:javascript
运行
复制
 $value1 = "2";
 $value2 = "4";
 $value3 = "";

 xml = '<parentnode>
        <tag1> ' .$value1. '</tag1>
        <tag2> ' .$value2. '</tag2>
        <tag3> ' .$value3. '</tag3>
       </parentnode>';

XML结果:

代码语言:javascript
运行
复制
<parentnode>
    <tag1>2</tag1>
    <tag2>4</tag2>
    <tag3></tag3> // <- Empty tag
</parentnode>

我想要的!

代码语言:javascript
运行
复制
    <parentnode>
            <tag1>2</tag1>
            <tag2>4</tag2> 
    </parentnode>

不带"tag3“等空标记的XML

谢谢!

EN

Stack Overflow用户

发布于 2013-09-12 02:07:33

通过使用Xpath,我的生产PHP目标代码的解决方案是:

代码语言:javascript
运行
复制
/*
 * Remove empty (no children) and blank (no text) XML element nodes, but not an empty root element (/child::*).
 * This does not work recursively; meaning after empty child elements are removed, parents are not reexamined.
 */
foreach( $this->xml->xpath('/child::*//*[not(*) and not(text()[normalize-space()])]') as $emptyElement ) {
    unset( $emptyElement[0] );
}

注意,不需要使用PHP DOM、DOMDocument、DOMXPath或dom_import_simplexml()。

代码语言:javascript
运行
复制
//this is a recursively option

do {
    $removed = false;
    foreach( $this->xml->xpath('/child::*//*[not(*) and not(text()[normalize-space()])]') as $emptyElement ) {
        unset( $emptyElement[0] );
        $removed = true;
    }
} while ($removed) ;
票数 2
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8603237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档