Quantcast
Channel: XML, System.Xml, MSXML and XmlLite forum
Viewing all articles
Browse latest Browse all 935

How to find whether attributes with specific values exist in the XML document ?

$
0
0

Hi,

I am trying to find out whether an XML Attribute with a specific value exists or not in each node of the xml document. My code is as follows:

Option Explicit
Dim sheet As Worksheet
Dim rowCount1, rowCount2, rowCount3, i As Integer
Dim xNode As MSXML2.IXMLDOMNode
Dim xDoc As MSXML2.DOMDocument
Dim Nodes As MSXML2.IXMLDOMNodeList

Public Sub LoadDocument()
rowCount1 = 0
rowCount2 = 0
rowCount3 = 0
Set xDoc = New MSXML2.DOMDocument
xDoc.validateOnParse = False
If xDoc.load("D:\Feedroutes.xml") Then
 Set Nodes = xDoc.SelectNodes("//Property[@name='Value']")
   ' The document loaded successfully.
 AttributesToColumns
Else
   ' The document failed to load.
End If
End Sub

Public Sub AttributesToColumns()
   Set sheet = ActiveSheet
 
   For Each xNode In Nodes
    If Not Nodes Is Nothing Then
      rowCount1 = rowCount1 + 1
      sheet.Cells(rowCount1, 3).Value = xNode.Text
    'I want to increment the rowCount even if the attribute with the
    'specific value doesn't exist
    ElseIf Nodes Is Nothing Then
      rowCount1 = rowCount1 + 1
    End If
    Next xNode
   End Sub

At present it only writes the values of the attributes in successive rows, whereas the desired output is, write only in rows where the attribute with the specific value is present. My XML looks like this:

<Tag name="PosLim" path="Feeders/R1" type="OPC"><Property name="Value">0.0</Property><Property name="DataType">4</Property><Property name="OPCServer">Ignition OPC-UA Server</Property><Property name="OPCItemPath">[Siemens]DB141,I74</Property><Property name="ScaleMode">1</Property><Property name="RawHigh">1000.0</Property><Property name="FormatString">#,##0.00</Property><Property name="EngUnit">Kg</Property></Tag><Tag name="JogSettle" path="Feeders/R1" type="OPC"><Property name="DataType">1</Property><Property name="OPCServer">Ignition OPC-UA Server</Property><Property name="OPCItemPath">[Siemens]DB141,I96</Property><Property name="RawHigh">1000.0</Property><Property name="FormatString">#,##0</Property><Property name="EngUnit">S</Property></Tag><Tag name="Positive Tol" path="Feeders/R1" type="OPC"><Property name="Value">0.0</Property><Property name="DataType">4</Property><Property name="OPCServer">Ignition OPC-UA Server</Property><Property name="OPCItemPath">[Siemens]DB141,I78</Property><Property name="ScaleMode">1</Property><Property name="RawHigh">1000.0</Property><Property name="FormatString">#,##0.00</Property><Property name="EngUnit">Kg</Property></Tag>


My purpose is to write the values of attribute "name" where name = "Value" and all the other attributes as well in corresponding rows, not successive rows. So from the xml file above, my excel output should be:

Row No.    Value      ScaleMode

Row1            0                 1

Row2

Row3            0                 1 etc




Viewing all articles
Browse latest Browse all 935

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>