0

このスクリプトを実行してXMLドキュメントを解析しようとしています。jsを検証すると、forループの後に)が欠落します。私はプログラミングに不慣れで、どこが間違っているのかわかりません。最後にjsファイル全体を投稿しました。ありがとう!

var meds = [];
for (var i = docMedActivities.size(); i--; i >= 0) {
    var activity = docMedActivities.get(i);
    var material = activity.getConsumable().getManufacturedProduct().getManufacturedMaterial();

meds.push({ 
    name: String(material.getName().getText()),
    displayName: String(material.getCode().getDisplayName()),
    ndc: String(material.getCode().getTranslations().get(0).getCode()),
    doseQty: String(activity.getDoseQuantity().getValue()),
    effectiveDateTime: String(activity.getEffectiveTimes().get(0).getLow().getValue()), // 20120502000000+0000
    code: String(material.getCode().getCode())
});
}

以下のjsファイル全体:

// Load the CCD Document
var doc = org.openhealthtools.mdht.uml.cda.util.CDAUtil.load(new java.io.ByteArrayInputStream(messageObject.getRawData().getBytes("UTF-8")));

// Get CCD Document Sections to be parsed
var docPatientRole = doc.getRecordTargets().get(0).getPatientRole();
var docPatient = docPatientRole.getPatient();
var docPatientName = docPatient.getNames().get(0);
var docPatientAddress = docPatientRole.getAddrs().get(0);
var docMedSection = doc.getMedicationsSection();
var docMedActivities = docMedSection.getMedicationActivities();

// Patient Identity
var patient = {
firstName:  String(docPatientName.getGivens().get(0).getText()),
lastName: String(docPatientName.getFamilies().get(0).getText()),
genderCode: String(docPatient.getAdministrativeGenderCode().getCode()),
dateOfBirth: String(docPatient.getBirthTime().getValue()) // YYYYMMDD
};

// Patient Address
var address = {
addressCity: String(docPatientAddress.getCities().get(0).getText()),
addressState: String(docPatientAddress.getStates().get(0).getText()),
addressPostalCode: String(docPatientAddress.getPostalCodes().get(0).getText())
};

// Patient Medication Activities
var meds = [];
for (var i = docMedActivities.size(); i--; i >= 0) {
var activity = docMedActivities.get(i);
var material =   activity.getConsumable().getManufacturedProduct().getManufacturedMaterial();

meds.push({
    name: String(material.getName().getText()),
    displayName: String(material.getCode().getDisplayName()),
    ndc: String(material.getCode().getTranslations().get(0).getCode()),
    doseQty: String(activity.getDoseQuantity().getValue()),
    effectiveDateTime: String(activity.getEffectiveTimes().get(0).getLow().getValue()), // 20120502000000+0000
    code: String(material.getCode().getCode())
});
}

// Populate Channel Map, use JSON so logs are readable
channelMap.put('patient', JSON.stringify(patient, null, 2));
channelMap.put('address', JSON.stringify(address, null, 2));
channelMap.put(&apos;meds&apos;, JSON.stringify(meds, null, 2));</script>
      <type>JavaScript</type>
      <data class="map">
        <entry>
          <string>Script</string>
          <string>// Load the CCD Document
var doc = org.openhealthtools.mdht.uml.cda.util.CDAUtil.load(new    java.io.ByteArrayInputStream(messageObject.getRawData().getBytes(&quot;UTF-8&quot;)));

// Get CCD Document Sections to be parsed
var docPatientRole = doc.getRecordTargets().get(0).getPatientRole();
var docPatient = docPatientRole.getPatient();
var docPatientName = docPatient.getNames().get(0);
var docPatientAddress = docPatientRole.getAddrs().get(0);
var docMedSection = doc.getMedicationsSection();
var docMedActivities = docMedSection.getMedicationActivities();

// Patient Identity
var patient = {
firstName:  String(docPatientName.getGivens().get(0).getText()),
lastName: String(docPatientName.getFamilies().get(0).getText()),
genderCode: String(docPatient.getAdministrativeGenderCode().getCode()),
dateOfBirth: String(docPatient.getBirthTime().getValue()) // YYYYMMDD
};

// Patient Address
var address = {
addressCity: String(docPatientAddress.getCities().get(0).getText()),
addressState: String(docPatientAddress.getStates().get(0).getText()),
addressPostalCode: String(docPatientAddress.getPostalCodes().get(0).getText())
};

// Patient Medication Activities
var meds = [];
for (var i = docMedActivities.size(); i--; i &gt;= 0) {
var activity = docMedActivities.get(i);
var material =   activity.getConsumable().getManufacturedProduct().getManufacturedMaterial();

meds.push({
    name: String(material.getName().getText()),
    displayName: String(material.getCode().getDisplayName()),
    ndc: String(material.getCode().getTranslations().get(0).getCode()),
    doseQty: String(activity.getDoseQuantity().getValue()),
    effectiveDateTime: String(activity.getEffectiveTimes().get(0).getLow().getValue()), // 20120502000000+0000
    code: String(material.getCode().getCode())
});
}

// Populate Channel Map, use JSON so logs are readable
channelMap.put(&apos;patient&apos;, JSON.stringify(patient, null, 2));
channelMap.put(&apos;address&apos;, JSON.stringify(address, null, 2));
channelMap.put(&apos;meds&apos;, JSON.stringify(meds, null, 2));
4

3 に答える 3

3

JSファイル内では、 ;>=ではなく書き込む必要があります。&gt;=後者は、JSが(X)HTMLPCDATA内に埋め込まれている場合にのみ意味があります。

(エラーメッセージの奇妙な表現の理由は、バリデーターがgt識別子として、およびビット単位のAND演算子i & gtを使用した式として解釈するためです。したがって、セミコロンを見ると、-loopヘッダーは終了しているはずです。)for


追加するために編集:また、forこの変更を行った後もループは機能しますが、これは奇妙な一連の癖と偶然の一致によるものです。これ:

for (var i = docMedActivities.size(); i--; i >= 0) {
    ...
}

これを意味します:

var i = docMedActivities.size();
while (i--) {      // note the post-increment: i-- evaluates to i's old value
    ...
    i >= 0;        // note that this expression has no side-effects
}

これはこれと同等です:

var i = docMedActivities.size();
while (i != 0) {
    i--;
    ...
}
i--;

たまたまあなたがやりたいことをします。したがって、コードはたまたま正しく機能しますが、そのように見えるという理由ではなく、将来の小さな変更によって、ひどく混乱する方法でコードが破損します。

あなたが本当に書きたいのは:

for (var i = docMedActivities.size() - 1; i >= 0; i--) {
    ...
}

(のi >= 0に来て、初期化式にaを入れます)。 i--- 1

于 2013-03-25T18:32:31.913 に答える
1

スクリプト内では、HTMLエンティティをエスケープする必要はありません。JSパーサーは、forステートメントで3つのセミコロンを検出しますが、これは有効には多すぎます。閉じ括弧が必要です。

また、条件を更新コードと交換しました。に変更します

for (var i = docMedActivities.size(); i>=0; i--)
于 2013-03-25T18:37:20.943 に答える
0

問題は、ループのこの部分にあります。i &gt;= 0

3番目のコンマの後、forステートメントは通常終了します。そのため、閉じ括弧が必要です。をに変更&gt;>ます。&gt;「より大きい」という意味で、このコードをどこかからコピーしたが、他の場所で変更する必要がある可能性があることを示しています。

また、for-statementの順序は次のようになっていると確信しています。

for (var i = docMedActivities.size(); i >= 0; i--) {

i--ステートメントの3番目の部分はであり、「より大きい」の部分は2番目である必要があることに注意してください。また、最後の部分の後のコンマは必要ありません。

コーディングに慣れていないので、少なくともforループについてはこのページを参照することをお勧めします。しかし、JavaScriptの一般的な紹介をいくつか見てみるのは良い考えです。

お役に立てれば。

于 2013-03-25T18:35:59.443 に答える