如何检查XML标签的属性是否为未定义的JavaScript(Mirth Connect)

时间:2018-12-02 19:54:22

标签: javascript mirth mirth-connect

我想检查XML标记中的属性是否存在。

这是示例xml标记: <value @code="">

我要检查以下条件。

  1. 如果有标签。
  2. 如果存在@code。
  3. 如果@code为空。

我目前正在检查以下情况:

if(msg['value'])
{
  hasValue='true';
  
  if(msg['value']['@code'])
  {
      hasCode='true';
  }else
  {
    hasCode='false';
  }
  
}

,但此条件返回 hasValue 标志始终为true。即使@code丢失/未定义。

是否可以检查@code是否未定义/缺失?

3 个答案:

答案 0 :(得分:0)

首先需要检查placeHolder中是否存在具有特定标记名的元素。 getElementsByTagName返回NodeList,因此您可以通过以下方式检查其length

 if( $placeHolder.getElementsByTagName(tagname).length > 0 )

答案 1 :(得分:0)

您可以使用hasOwnProperty()检查元素或属性是否存在,也可以使用.toString()检查属性值是否为空。

if(msg.hasOwnProperty('value')) {
  hasValue='true';

  if(msg.value.hasOwnProperty('@code') && msg.value['@code'].toString()) {
    hasCode='true';
  } else {
    hasCode='false';
  }
}

答案 2 :(得分:0)

hasOwnProperty通常不用于xml(对于使用javascript标签的用户,mirth嵌入了Mozilla Rhino javascript引擎,该引擎使用不推荐使用的e4x标准来处理xml。)当有多个名为的子元素时,hasOwnProperty的行为不符合预期value。根据命名约定,我假设可以使用不同的代码来包含多个值。

这将为hasCode创建一个数组,该数组为每次出现的名为value的子元素保留一个布尔值。

var hasCode = [];
var hasValue = msg.value.length() > 0;
for each (var value in msg.value) {
    // Use this to make sure the attribute named code exists
    // hasCode.push(value['@code'].length() > 0);

    // Use this to make sure the attribute named code exists and does not contain an empty string
    // The toString will return an empty string even if the attribute does not exist
    hasCode.push(value['@code'].toString().length > 0);
}

length是字符串的属性,它是xml对象的方法,因此括号是正确的。)