0

我正在尝试使用 AutoItV3 将一些实体自动插入到一个软件中。

如果我的自动化可以从 xml 文件中读取信息并使用它来生成我的实体,那将会容易得多,因为我可以为不同的测试解析不同的 xml 文件。

我正在使用流行的扩展 MSXML 来尝试执行此操作。这可以在这里找到: https ://www.autoitscript.com/forum/applications/core/interface/file/attachment.php?id=44418

我的 XML 是一个相对简单的结构,在我的所有“实体”中的每个“实体”下都有各种字段

<?xml version="1.0" encoding="UTF-8"?>
<entities>
    <entity>
        <name>
            Mation Jr, Mr Auto
        </name>
        <legalname>
            Mr Auto Mation Jr
        </legalname>
    </entity>
        <entity>
        <name>
            Mation Sr, Mr Auto
        </name>
        <legalname>
            Mr Auto Mation Sr
        </legalname>
    </entity>
</entities>

在我的脚本头中,我正在导入 MSXML au3 文件并设置 XML 路径

#include <_MSXML.au3>
; Set the XML file
$xmlpath = @ScriptDir & "\Entity.xml"

我的问题是,如何遍历所有实体中每个实体的属性?

这是我到目前为止所拥有的,但我不明白如何从实体节点下列出的单个实体中检索值:

; Fetch All Entities from XAML
$ENTITIES = _MSXML_SelectNodes($oXml, "entities/entity")

If ($ENTITIES[0] > 0) Then
; This part works and will iterate for x amount of entities provided 

; Fetch Entity as pos $i
For $i = 1 To $ENTITIES[0] Step 1

    ; How can I iterate through attributes from ENTITIES[$i] ??

Next
Else
    MsgBox(4096, 'Error', 'No entity was provided')
EndIf

我知道我的问题很广泛,但我认为应该有足够的信息开始

4

1 回答 1

1

该 UDF 的问题在于,它似乎希望为所有内容返回字符串,而不是更有用的 xml 对象。我会避免它,而只是自己使用 com 对象$oXml = ObjCreate("Msxml2.DOMDocument"),然后在此处查看文档

但无论如何,我认为这段代码会给你你想要的:

; Set the XML file
$xmlpath = @ScriptDir & "\Entity.xml"

$oXml = ObjCreate("Msxml2.DOMDocument")

$oXml.load($xmlpath)

; Fetch All Entities from XAML
$objNodeList = $oXml.selectNodes("entities/entity")
For $node in $objNodeList
    ConsoleWrite($node.nodename & @CRLF)
    $objChildNodeList = $node.selectNodes("*")
    For $ChildNode in $objChildNodeList
        ConsoleWrite(@TAB & $ChildNode.nodename & ' = ' & $ChildNode.text & @CRLF)
    Next

Next

请注意实际上不需要使用 UDF,您只需使用 com 对象的内置方法即可。在我看来,这比使用 UDF 更简单。

另一件值得一提的事情是,如果你不知道如何在 autoit 中做任何事情,你可以尝试搜索如何在 vba 或 vbs 中做同样的事情,因为这些语言非常相似,而且 autoit 可以使用所有在 vba/vbs 中使用的 com 对象。当 vba/vbs 做这样的事情时,Set oXml = CreateObject("Msxml2.DOMDocument")只需在 autoit: 中执行此操作$oXml = ObjCreate("Msxml2.DOMDocument")

于 2017-11-21T16:45:16.963 回答