我有以下 XML 示例。
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:f="http://kbcfp.com/BoTech/Inferno/Fault"
xmlns:base="http://kbcfp.com/BoTech/Inferno/Base" xmlns:h="http://kbcfp.com/BoTech/Inferno/Header" xmlns:ep="http://torstonetech.com/Inferno/FDE">
<SOAP-ENV:Header>
<h:optLockSeqNumbers>
<h:values><h:editSequenceNumber>1</h:editSequenceNumber><h:modifiedDateTime>2015-01-21T15:33:10+06:30</h:modifiedDateTime><h:modifiedUserId>1005</h:modifiedUserId><h:objectId>100100049</h:objectId><h:optimisticLockObjTypeId>11</h:optimisticLockObjTypeId></h:values>
</h:optLockSeqNumbers>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ep:AccountAttrs><ep:accountId>100100049</ep:accountId><ep:attrId>100001896</ep:attrId>
<ep:AccountAttrs><ep:accountId> </ep:accountId><ep:attrId>100001896</ep:attrId></ep:AccountAttrs>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我必须阅读此 XML 和预期输出,如下所示。
1st ep:accountId 100100049
ep:attrId 100001896
2nd ep:accountId <!-- want to write 1 space in these place -->
ep:attrId 100001896
这是我的 XML 解析器代码。
Dim xmlDoc As MSXML2.DOMDocument
Set xmlDoc = New MSXML2.DOMDocument
xmlDoc.LoadXML aboveXMLStringVale
Call readNode(xmlDoc.ChildNodes)
public Function readNode(ByRef nodes AS MSXML2.IXMLDOMNodeList)
Dim xmlNode As MSXML2.IXMLDOMNode
For Each xml Node In nodes
If xmlNode.nodeType = NODE_TEXT Then
ThisWorkbook.Worksheets("xxx").Cell(row,column) = xmlNode.ParentNode.ParentNode.nodeName
ThisWorkbook.Worksheets("xxx").Cell(row,column) = xmlNode.ParentNode.nodeName
ThisWorkbook.Worksheets("xxx").Cell(row,column) = "'" & xmlNode.NodeValue
End If
If xmlNode.HasChildNodes Then
Call readNode(xmlNode.ChildNodes)
End If
Next
End Function
如果 XML 子节点文本没有空格值,则代码很好并显示输出。我的代码条件是使用“If xmlNode.HasChildNodes Then”条件检查 XML 元素标记是否有价值
。
对于空白情况,xmlNode 对象没有子节点和长度。
所以我不能检查条件,也不能写空白元素标记值,它们的编码将跳到下一个 XML 元素标记。
我非常感谢任何帮助和建议。
另外:
这个 “If xmlNode.HasChildNodes Then” 条件是检查 xmlNode 子节点的长度。
例如。if childnode length > 0 return true, if not return false.
作为我的空白情况,条件将始终返回 false,因为空白值的子节点长度为 0。