【问题标题】:How to check if TAG exists inside XML with PHP?如何使用 PHP 检查 TAG 是否存在于 XML 中?
【发布时间】:2009-11-01 19:14:58
【问题描述】:

如何检查 XML 文件中是否存在 TAGname。

所以如果我想得到

$dom->getElementsByTagName('error')

它不存在,它会打印出类似错误消息的东西。

编辑:

我正在使用 API。因此,当用户输入错误的用户名时,会加载另一个包含标签 <error> 的 XML 文件。

但是,如果他们输入正确的用户名,则 XML 文件不包含 <error> 标记,因此我正在寻找一种方法来检查错误标记是否存在于 XML 中。

【问题讨论】:

    标签: php xml


    【解决方案1】:
    $dom = new DOMDocument(); 
    $dom->load( 'some.xml' ); 
    
    $errorNodes = $dom->getElementsByTagName('error'); 
    
    if($errorNodes->length == 0)
    {
      message('no error nodes'); // user defined
    }
    

    【讨论】:

    • 这工作正常,但如果加载的 XML 不包含 标记(这意味着它工作),它仍然显示消息。
    • 嗯!如果没有看到您的代码和数据,我不确定发生了什么。我所知道的是 DOMDocument 对格式错误的 XML 不是很宽容(这很容易制作)。如果 DOMDocument 消耗了一些错误的 XML,我希望 DOMDocument 会严重阻塞,但如果不是,它可能会显示包含错误标记的 XML 的 $errorNodes->length 为零。您可以尝试打印出 DOMDocument 以查看是否值得测试以查看 XML 是否正确加载。
    【解决方案2】:
    $error=false;
    $AllElements = $xmlDoc->getElementsByTagName('*');
        foreach ($AllElements as $OneElement) {
        if (($OneElement->tagName)=='error') { $error = true; }
        }
    if $error {
        message('error'); // user defined
    }
    else
    {
        message('no error nodes'); // user defined
    }
    

    【讨论】:

    • 欢迎来到 Stack Overflow!尽管此答案可能是正确且有用的,但如果您 include some explanation along with it 解释它如何帮助解决问题,则最好。如果有更改(可能不相关)导致它停止工作并且用户需要了解它曾经是如何工作的,这在未来变得特别有用。
    • 我不知道为什么需要对此进行解释。这是完全合理的。很好的解决方案!
    【解决方案3】:
    $errors = $dom->getElementsByTagName('error');
    $exists = $errors->length > 0;
    
    if (!$exists ) {
        echo 'Error message..';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 2015-08-27
      • 2013-03-01
      • 1970-01-01
      • 2011-08-07
      • 2016-11-08
      相关资源
      最近更新 更多