【问题标题】:XML parser don't know whitespace lengthXML 解析器不知道空格长度
【发布时间】:2015-01-27 20:39:01
【问题描述】:

我有以下 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 子节点文本没有空格值,则代码很好并显示输出。 我的代码条件是通过使用检查 XML 元素标记是否有价值 "If xmlNode.HasChildNodes Then" 条件。
对于空格情况,xmlNode 对象没有子节点和长度。
所以我无法检查条件,不能写入空白元素标记值,它们的编码将跳到下一个 XML 元素标记。

非常感谢您提供任何帮助和建议。

补充:
这个 "If xmlNode.HasChildNodes Then" 条件是检查 xmlNode 子节点长度。
例如。
if childnode length &gt; 0 return true, if not return false.
作为我的空白情况,条件将始终返回 false,因为空白值的子节点长度为 0。

【问题讨论】:

    标签: xml excel vba domdocument ixmldomelement


    【解决方案1】:

    您的 XML 解析器忽略了空白节点。在加载 XML 之前尝试更改 DOMDocument.preserveWhiteSpace 属性。

    Dim xmlDoc As MSXML2.DOMDocument
    Set xmlDoc = New MSXML2.DOMDocument
    xmlDoc.preserveWhiteSpace = true
    xmlDoc.LoadXML aboveXMLStringVale
    

    提示:您正在使用 XML 解析器来解析 SOAP。您没有可用的 SOAP 解析器/库吗?

    【讨论】:

    • 您没有可用的 SOAP 解析器/库吗?不,我认为,如果您有请出示样品。顺便说一句,感谢您的代码示例。它的工作。但是需要将 xmlDoc.preserveWhiteSpace = false 更改为 xmlDoc.preserveWhiteSpace = true。如果您将答案 false 修改为 true,我会接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2012-10-05
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多