1

ASP VBscript を使用して解析する必要がある次の XML があります。

<ERROR>
    <ITEM>
        <CODE>X11</CODE> 
        <TEXT>E112</TEXT>
    </ITEM>
    <ITEM>
        <CODE>X14</CODE> 
        <TEXT>E888</TEXT> 
    </ITEM>
    <OTHER-INFO>
        <XID>I989</XID>  
    <OTHER-INFO>    
<ERROR>

私の要件は、 ITEM 内の TEXT 値を、 getInfo(code) 関数から取得する対応する詳細情報に置き換えることです。従来の asp と vbscript を使用して TEXT 値を置き換える方法。

出力が必要です。

<ITEM>
    <CODE>X11</CODE> 
        <TEXT>Detailed Explanation about this error</CODE>
</ITEM>

各 ITEM を反復処理する次のコードを記述しました。objMSXML には上記のタグが含まれており、結果を同じオブジェクトに戻す必要があります。

If objMSXML.getElementsByTagName("ERROR").length <> 0 Then
    For Each ObjNode In objMSXML.documentElement.selectNodes("ITEM")
        strTrasMsg = getInfo(objECGO.xVal("CODE",ObjNode,"STR"))


    Next
End If 
4

3 に答える 3

1

xpath を使用してノードを選択し、テキストを置き換えてみてください。

私はこれを試していませんが、xpathがサポートされているのでうまくいくはずです

   Set Node = xmlDoc.selectsinglenode("//ERROR/ITEM[../CODE/text()="item code vlaue"/text)

   Node.text = "NEW VALUE"

   xmldoc.save

または、コードと説明を既に入力しているので、タグを記述して応答を再作成する別のアプローチもあります。

var myxml = "<ITEM><CODE>"your value"</CODE><TEXT>"your value"</CODE></ITEM>

このxmlを保存するよりも何か。

于 2012-06-21T13:11:37.580 に答える
0

以下を試してください (各 ITEM に TEXT 要素が存在すると仮定します)。

For Each oItem In objMSXML.documentElement.selectNodes("ITEM") 
    oItem.selectSingleNode("TEXT").text = getInfo(objECGO.xVal("CODE", oItem ,"STR"))  
Next 
于 2012-06-21T13:27:19.027 に答える
0

簡潔な答え:

For Each ObjNode In objMSXML.documentElement.selectNodes("ITEM")
    strTrasMsg = "whatever-" & ObjNode.firstChild.text ' getInfo(objECGO.xVal("CODE",ObjNode,"STR"))
    WScript.Echo strTrasMsg, ObjNode.childNodes(1).text
    ObjNode.childNodes(1).text = strTrasMsg
Next

つまり、DOM ツリーを使用し、インデックスによって子ノードにアクセスします。

長い答え:

このスケルトンに従って「私のxmlを編集する」問題を(すべて)提示する場合:

  Dim sXml : sXml = Join(Array(_
       "<ERROR>" _
    ,  "    <ITEM>" _
    ,  "        <CODE>X11</CODE>" _
    ,  "        <TEXT>E112</TEXT>" _
    ,  "    </ITEM>" _
    ,  "    <ITEM>" _
    ,  "        <CODE>X14</CODE>" _
    ,  "        <TEXT>E888</TEXT>" _
    ,  "    </ITEM>" _
    ,  "    <OTHER-INFO>" _
    ,  "        <XID>I989</XID>" _
    ,  "    </OTHER-INFO>" _
    ,  "</ERROR>" _
  ))
  Dim objMSXML : Set objMSXML = CreateObject("Msxml2.DOMDocument")

  objMSXML.setProperty "SelectionLanguage", "XPath"
  objMSXML.async = False
  objMSXML.loadXml sXml

  If 0 = objMSXML.parseError Then
     If objMSXML.getElementsByTagName("ERROR").length <> 0 Then
        Dim ObjNode, strTrasMsg
        For Each ObjNode In objMSXML.documentElement.selectNodes("ITEM")
            strTrasMsg = "whatever-" & ObjNode.firstChild.text '             
            ---- problem -----
        Next
        WScript.Echo objMSXML.xml
     End If
  Else
     WScript.Echo objMSXML.parseError.reason
  End If

出力:

whatever-X11 E112
whatever-X14 E888
<ERROR>
        <ITEM>
                <CODE>X11</CODE>
                <TEXT>whatever-X11</TEXT>
        </ITEM>
        <ITEM>
                <CODE>X14</CODE>
                <TEXT>whatever-X14</TEXT>
        </ITEM>
        <OTHER-INFO>
                <XID>I989</XID>
        </OTHER-INFO>
</ERROR>

適切な形式と有効性に関する些細な問題は、投稿する前に解決でき、解決策ははるかに迅速に群がります。

于 2012-06-21T13:29:55.720 に答える