我需要将XML文件(SOAP + xml)发送到webservice,但我需要更改XML文件中的2个节点值。这是XML文件:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns2826:get_order_data xmlns:ns2826="http://tempuri.org">
<periode>
<tgl1 xsi:type="xsd:string">Date 1</tgl1>
<tgl2 xsi:type="xsd:string">Date 2</tgl2>
</periode>
</ns2826:get_order_data>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我需要将日期1和日期2更改为日期时间值。到目前为止,我试图像这样更改xml文件:
Sub requestByDate()
'edit file xml sebelum request'
Dim myXmlDocument As XmlDocument = New XmlDocument()
myXmlDocument.Load("C:\xmlRequest\requestOrderdata.xml")
Dim node As XmlNode
node = myXmlDocument.DocumentElement
Dim node2 As XmlNode 'Used for internal loop.'
For Each node In node.ChildNodes
For Each node2 In node.ChildNodes
'MsgBox(node2.InnerText)'
If node2.Name = "ns2826:get_order_data" Then
Dim newkey As String
newkey = "<" & "periode" & ">" & vbCrLf
newkey = newkey & "<" & "tgl1 xsi:type=" & ControlChars.Quote & "xsd:string" & ControlChars.Quote & ">10/06/2015 01:00:00</tgl1>" & vbCrLf
newkey = newkey & "<tgl2 xsi:type=" & ControlChars.Quote & "xsd:string" & ControlChars.Quote & ">10/06/2015 03:00:00</tgl2>" & vbCrLf
newkey = newkey & "</periode>"
MsgBox("Old Key = " & node2.InnerText & Strings.Chr(9) & "New key = " & newkey)
node2.InnerText = newkey
myXmlDocument.Save("C:\xmlRequest\requestOrderData2.xml")
End If
Next
Next
'selesai edit'
End Sub
但它没有工作,因为新的xml文件不是有效的XML请求文件(如果我使用这个新的xml文件作为请求运行程序,它返回&#34;有多个根元素&#34; )。 有没有其他方法可以更改日期1和日期2值?
答案 0 :(得分:0)
查看较新的API XDocument
以替换您的XmlDocument
方法,例如:
Dim doc = XDocument.Load("C:\xmlRequest\requestOrderdata.xml")
Dim ns2826 As XNamespace = "http://tempuri.org"
'find and update <tgl1>'
Dim tgl1 = doc.Descendants(ns2826 + "get_order_data").Elements("periode").Elements("tgl1").First
tgl1.Value = "10/06/2015 01:00:00"
'find and update <tgl2>'
Dim tgl2 = doc.Descendants(ns2826 + "get_order_data").Elements("periode").Elements("tgl2").First
tgl2.Value = "10/06/2015 03:00:00"
doc.Save("C:\xmlRequest\requestOrderData2.xml")
您还可以使用VB中提供的XML axis语法,例如:
Imports <xmlns:ns2826="http://tempuri.org">
.....
'find <tgl1>'
Dim tgl1 = doc...<ns2826:get_order_data>.<periode>.<tgl1>.First
'find <tgl2>'
Dim tgl2 = doc...<ns2826:get_order_data>.<periode>.<tgl2>.First