这是我第一次尝试使用 VBA 解析 XML 文件,所以我可能遗漏了一些显而易见的东西; 我已经可以打印这个了:
<values>
<value code="1">A</value>
<value code="2">B</value>
<value code="3">C</value>
</values>
使用此代码行:
Debug.Print Variable.SelectSingleNode("values").XML
,其中 values 是其父节点 Variable
但我不知道如何遍历 values 的子级,并打印“1A”、“2B”、“3C”对
据我所知,this question使用根的第一个 child ,而我的目标是更深入地了解多层次结构。
最佳答案
在这里,我们可以看到如何使用 MSXML6.0 库为您的特定示例解析 XML。要使用此示例,您需要在 VBA 项目中添加对 MSXML6.0 的引用。
我建议您特别注意 XPath 变量“//value”和诸如 .getNamedItem("code") 之类的选择器——您需要熟悉其中的更多内容才能成为精通 XML 解析。幸运的是,其中很多都传递到 HTML 解析中,因此这是一项有用的技能!
在这种情况下,我选择了所有值节点。遍历它们就像根据节点数组的长度执行 for 循环并使用 .item(i) 调用一样简单。
Option Explicit
Sub test()
Dim strXml As String
strXml = "<values><value code=""1"">A</value><value code=""2"">B</value><value code=""3"">C</value></values>"
Dim objXML As MSXML2.DOMDocument60
Set objXML = New MSXML2.DOMDocument60
If Not objXML.LoadXML(strXml) Then 'strXML is the string with XML'
Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
End If
Dim entry_point As IXMLDOMNode
Set entry_point = objXML
Dim myNodes As IXMLDOMNodeList
Dim myElement As IXMLDOMElement
Dim myNode As IXMLDOMNode
Dim nNode As Integer
Set myNodes = entry_point.SelectNodes("//value")
If myNodes.Length > 0 Then
For nNode = 0 To myNodes.Length
Set myNode = myNodes(nNode) ' Get the first node.
If myNode Is Nothing Then
Else
Debug.Print myNode.Text
Debug.Print myNode.Attributes.getNamedItem("code").Text
End If
Next nNode
Else
Debug.Print "No nodes found."
End If
End Sub
这是另一种情况,我选择所有 VALUES 节点,然后遍历每个 VALUES 节点的子节点(假设所有值节点都只有值子节点)。
Option Explicit
Sub test()
Dim strXml As String
strXml = "<values><value code=""1"">A</value><value code=""2"">B</value><value code=""3"">C</value></values>"
Dim objXML As MSXML2.DOMDocument60
Set objXML = New MSXML2.DOMDocument60
If Not objXML.LoadXML(strXml) Then 'strXML is the string with XML'
Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
End If
Dim entry_point As IXMLDOMNode
Set entry_point = objXML
Dim myNodes As IXMLDOMNodeList
Dim myChildNodes As IXMLDOMNodeList
Dim myElement As IXMLDOMElement
Dim myNode As IXMLDOMNode
Dim myChildNode As IXMLDOMNode
Dim nNode As Integer
Dim nChildNode As Integer
Set myNodes = entry_point.SelectNodes("//values")
If myNodes.Length > 0 Then
For nNode = 0 To myNodes.Length - 1
Set myNode = myNodes(nNode)
If myNode Is Nothing Then
Else
Set myChildNodes = myNode.ChildNodes ' Get the children of the first node.
For nChildNode = 0 To myChildNodes.Length - 1
Debug.Print myChildNodes(nChildNode).Text
Debug.Print myChildNodes(nChildNode).Attributes.getNamedItem("code").Text
Next nChildNode
End If
Next nNode
Else
Debug.Print "No nodes found."
End If
End Sub
关于xml - VBA XML 解析——遍历子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40658630/
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
所以这可能有点令人困惑,但请耐心等待。简而言之,我想遍历具有特定键值的所有属性,然后如果值不为空,则将它们插入到模板中。这是我的代码:属性:#===DefaultfileConfigurations#default['elasticsearch']['default']['ES_USER']=''default['elasticsearch']['default']['ES_GROUP']=''default['elasticsearch']['default']['ES_HEAP_SIZE']=''default['elasticsearch']['default']['MAX_OP
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
我想用Nokogiri解析HTML页面。页面的一部分有一个表,它没有使用任何特定的ID。是否可以提取如下内容:Today,3,455,34Today,1,1300,3664Today,10,100000,3444,Yesterday,3454,5656,3Yesterday,3545,1000,10Yesterday,3411,36223,15来自这个HTML:TodayYesterdayQntySizeLengthLengthSizeQnty345534345456563113003664354510001010100000344434113622315