当前位置: 首页 > 面试题库 >

使用PHP从XML删除空标签

马飞
2023-03-14
问题内容

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

例:

 $value1 = "2";
 $value2 = "4";
 $value3 = "";

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

XML结果:

<parentnode>
    <tag1>2</tag1>
    <tag2>4</tag2>
    <tag3></tag3> // <- Empty tag
</parentnode>

我想要的是!

    <parentnode>
            <tag1>2</tag1>
            <tag2>4</tag2> 
    </parentnode>

不含空标签(如“ tag3”)的XML

谢谢!


问题答案:

您可以将XPath与谓词
not(node())一起使用,以选择所有没有子节点的元素。

<?php
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->loadxml('<parentnode>
    <tag1>2</tag1>
    <tag2>4</tag2>
    <tag3></tag3>
    <tag2>4</tag2>
    <tag3></tag3>
    <tag2>4</tag2>
    <tag3></tag3>
</parentnode>');

$xpath = new DOMXPath($doc);

foreach( $xpath->query('//*[not(node())]') as $node ) {
    $node->parentNode->removeChild($node);
}

$doc->formatOutput = true;
echo $doc->savexml();

版画

<?xml version="1.0"?>
<parentnode>
  <tag1>2</tag1>
  <tag2>4</tag2>
  <tag2>4</tag2>
  <tag2>4</tag2>
</parentnode>


 类似资料:
  • 问题内容: 我需要一些帮助,使用bash工具解决几个问题 我想从文件中删除空的xml标记,例如: 成为: 为此,我已经通过此命令这样做 并不是那么严格,它更像是一个把戏,更合适的方法是找到并删除它。建议? 二,如何去: 至: 整体而言?从: 至: 您可以个人回答问题吗?非常感谢你! 问题答案: (posix版本,例如GNU sed) 递归地将空标签从下杆移到上杆,直到不再有空标签。 不是XML解析

  • 问题内容: 我正在寻找一个简单的Java代码段,以从(任何)XML结构中删除空标签 应该变成 问题答案: 我想知道使用XOM库这样做是否容易,并尝试一下。 事实证明这很容易: 这可能无法正确处理所有极端情况,例如完全空的文档。对于原本为空但具有属性的元素该怎么办? 如果要保存带有属性的XML标签,我们可以在方法’handleNode’中添加以下检查: 另外,如果xml有两个或多个空标记,则一个接一

  • 问题内容: 我有一个xml,如下所示: 现在,我想删除标记,但在此处保留内容“ ABCD”。或者有没有一种方法可以使用java从整个XML文件中删除。请帮忙。谢谢。 问题答案: 使用DOM4J或SAX解析器解析文档 从标签中获取价值 从值中删除所有html标签 JSoup三通 字符串替换 将新值设置为XML字体标签

  • 我试图通过StringBuilder传递一个XML对象,以便与对象进行比较,以符合我的需要。 我想知道是否有一种很好的方法可以从整个字符串中删除特定的标记。下面我准备了一个例子: 原件: 期望的结果: 所以基本上,我想删除id、state和整个注释,并关闭ApprovalItem标记(或者只删除所有斜杠)。 有什么想法吗?提前感谢:) 乔纳斯

  • 有没有办法从一个巨大的xml文件中删除注释( 两者,根元素前的注释 和内的注释 最好的解决方案是使用xPath。我试过了 它适用于DOM,但不适用于vtd xml 这是我选择评论的代码 但此处的屏幕上打印的是nothing。 有没有办法用vtd xml做到这一点? 谢谢你的帮助。

  • 问题内容: 嘿,我需要删除字符串中的所有图像,但我找不到正确的方法。 这是我尝试过的方法,但是不起作用: 有任何想法吗? 问题答案: 尝试将放到的前面。 编辑:我刚刚测试了您的正则表达式,它工作正常。这是我使用的: 结果是: