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

how do i check if attribute from XML tag is undefined JavaScript (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';
  }
  
}

但此条件 returns hasValue 标志始终为真。即使@code 是 missing/undefined.

有没有办法检查@code 是否为 undefined/missing?

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

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

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

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

这将为 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 对象上的方法,因此括号是正确的。)