我有以下需要使用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(代码)函数中获取它。如何使用经典的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
答案 0 :(得分: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。
答案 1 :(得分:0)
尝试以下方法(假设每个ITEM都存在TEXT元素)。
For Each oItem In objMSXML.documentElement.selectNodes("ITEM")
oItem.selectSingleNode("TEXT").text = getInfo(objECGO.xVal("CODE", oItem ,"STR"))
Next
答案 2 :(得分: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>
在发布之前,可以解决良好的形式和有效性的微不足道的问题,并且解决方案会更快地涌现。