在VB脚本和经典ASP中删除XML中的节点
我需要删除XML中的一个节点,我的XML如下所示在VB脚本和经典ASP中删除XML中的节点,xml,asp-classic,vbscript,Xml,Asp Classic,Vbscript,我需要删除XML中的一个节点,我的XML如下所示 <message_version>Test</message_version> <responder_id>My test XML file</responder_id> </m_control> <m_content> <b_control> <quote_response_status>error</quote_response_st
<message_version>Test</message_version>
<responder_id>My test XML file</responder_id>
</m_control>
<m_content>
<b_control>
<quote_response_status>error</quote_response_status>
<quote_error_note>
<reason>
<note>
<text>An error occurred.
</text>
</note>
</reason>
</quote_error_note>
</b_control>
测试
我的测试XML文件
错误
发生了一个错误。
在上面的xml中,我需要删除节点“text”和“note”,保持文本“a error accurrent.”不变。我怎样才能做到这一点
基本上,在删除节点“text”和“note”后,我需要一个如下所示的XML
<message_version>Test</message_version>
<responder_id>My test XML file</responder_id>
</m_control>
<m_content>
<b_control>
<quote_response_status>error</quote_response_status>
<quote_error_note>
<reason>
An error occurred.
</reason>
</quote_error_note>
</b_control>
测试
我的测试XML文件
错误
发生了一个错误。
我尝试了以下方法,但没有成功:
sXMLPath = "//message/m_content/b_control/quote_error_note/reason"
Set sRemoveText = m_objResponseXML.selectSingleNode(sXMLPath & "/note/text")
Set sRemoveNote = m_objResponseXML.selectSingleNode(sXMLPath & "/note")
If Not sRemoveText is Nothing Then
m_objResponseXML.selectSingleNode(sXMLPath & "/note").removeChild(sRemoveText)
sErrorMsg = GetNodeText(sXMLPath & "/note/text", m_objResponseXML)
End if
If Not sRemoveText is Nothing Then
m_objResponseXML.selectSingleNode(sXMLPath).removeChild(sRemoveNote)
End If
If sErrorMsg <> "" Then
m_objResponseXML.selectSingleNode(sXMLPath).text = sErrorMsg
End If
sXMLPath=“//message/m_content/b_control/quote_error_note/reason”
设置sRemoveText=m_objResponseXML。选择SingleNode(sXMLPath&“/note/text”)
设置sRemoveNote=m_objResponseXML。选择SingleNode(sXMLPath&“/note”)
如果不是,那么sRemoveText什么都不是
m_objResponseXML.selectSingleNode(sXMLPath&“/note”).removeChild(sRemoveText)
sErrorMsg=GetNodeText(sXMLPath&“/note/text”,m_objResponseXML)
如果结束
如果不是,那么sRemoveText什么都不是
m_objResponseXML.selectSingleNode(sXMLPath).removeChild(sRemoveNote)
如果结束
如果是sErrorMsg“”,则
m_objResponseXML.selectSingleNode(sXMLPath).text=serrormg
如果结束
非常感谢您提供的任何帮助。以您想要的方式删除数据,这与XML/HTML层次结构的理念背道而驰,即每个标记都包含在另一个标记中 简单的解决方案是复制字符串、删除标记并填充原因标记的文本属性来实现这一点 另一种方式,将是邪恶的 要操作XML,可以使用 编辑 基于所示示例
sXMLPath = "//message/m_content/b_control/quote_error_note/reason"
您的XPath字符串是不正确的
sXMLPath = "//b_control/quote_error_note/reason"
用代码举例说明Rafael的建议,并在阅读文档时为您提供一些搜索/关键字:
Option Explicit
Dim oXML : Set oXML = CreateObject("MSXML2.DomDocument")
If oXML.load(".\005.xml") Then
WScript.Echo oXML.xml
Dim ndReason : Set ndReason = oXML.selectSingleNode("/b_control/quote_error_note/reason")
If ndReason Is Nothing Then
WScript.Echo "not reasonable"
Else
Dim sReason : sReason = ndReason.selectSingleNode("note/text").text
ndReason.removeChild ndReason.firstChild
WScript.Echo oXML.xml
ndReason.appendChild oXML.createTextNode(sReason)
WScript.Echo oXML.xml
End If
Else
WScript.Echo oXML.parseError.reason
End If
输出:
cscript 005.vbs
<b_control>
<quote_response_status>error</quote_response_status>
<quote_error_note>
<reason>
<note>
<text>An error occurred.
</text>
</note>
</reason>
</quote_error_note>
</b_control>
<b_control>
<quote_response_status>error</quote_response_status>
<quote_error_note>
<reason>
</reason>
</quote_error_note>
</b_control>
<b_control>
<quote_response_status>error</quote_response_status>
<quote_error_note>
<reason>An error occurred.</reason>
</quote_error_note>
</b_control>
cscript 005.vbs
错误
发生了一个错误。
错误
错误
发生了一个错误。
谢谢拉斐尔。我已经厌倦了下面的代码,但是结果是否定的,我无法删除节点。Rafael,我已经用我厌倦的代码更改编辑了您的响应。如果有什么问题,请纠正我wrong@user809244代码现在移到问题的主体