2017-11-21 2 views
0

AutoItV3을 사용하여 일부 엔터티를 소프트웨어에 삽입하는 작업을 자동화하려고합니다.AutoItV3에서 MSXML을 사용하여 포함 된 XML 값을 검색하려면 어떻게합니까?

내 자동화가 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> 

나는 나는 모든 내에서 각각의 '실체'에서 다양한 분야를해야합니다 비교적 간단 구조

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

내 질문 인 XML 경로를 MSXML의 AU3 파일을 가져 오기 및 설정, 어떻게 모든 엔티티 내의 각 엔티티의 속성을 반복 할 수 있습니까?

내가 지금까지 무엇을 가지고,하지만 난 내가 엔티티 노드 아래에 나열된 개인 기업에서 값을 검색 할 방법을 이해하고 있지 않다 :

; 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 

내 질문은 매우 광범위하지만 이해

답변

1

이 UDF의이 문제점은 더 유용한 xml 객체 대신 모든 문자열을 반환하려는 것처럼 보인다는 것입니다. 나는 그것을 회피하고 com 객체를 $oXml = ObjCreate("Msxml2.DOMDocument")과 함께 사용하고 documentation here을 살펴 보겠습니다.

그러나 어쨌든,이 코드는 당신이 원하는 걸 얻을 것이라고 생각 :

거기 UDF를 사용할 필요가 정말없고 그냥 COM 객체의 메소드에 내장 사용하는 방법을
; 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를 사용하는 것보다 간단합니다.

언급 할 가치가있는 또 다른 사항은 언어가 거의 비슷하고 자동 적용되므로 vba 또는 vbs에서 동일한 작업을 수행하는 방법을 검색 할 수있는 방법을 찾지 못하는 경우입니다 vba/vbs에서 사용되는 모든 com 객체를 사용할 수 있습니다. vba/vbs가 Set oXml = CreateObject("Msxml2.DOMDocument")과 같은 작업을 수행하는 경우 자동 입력 : $oXml = ObjCreate("Msxml2.DOMDocument")에서이 작업을 수행하십시오.

+0

나는 autoit에 완전한 vbs 지원이 있다는 것을 몰랐다. 나는 그것을 염두에 둔다. IDE를 사용할 수 없을 때 개발하는 것이 약간 더 어렵습니다./어쨌든 내가 기회를 얻고 업데이트 할 때 제안을 시도 할 것입니다. – jasttim

+0

전체 vbs 지원을 사용할 수 있는지 확실하지 않습니다. 그냥 사용할 수 있습니다. co.kr에서 동일한 방법으로 개체를 만듭니다. 또한 자동 정렬을위한 "일종의"IDE가 필요한 경우 사이트에서 [스크립트 편집기] (https://www.autoitscript.com/site/autoit-script-editor/downloads/)를 얻을 수 있습니다. – garbb

+0

스크립트 편집기를 사용하여 VS17에서 C# 또는 C++을 작성했을 때와 동일한 수준의 디버깅을 수행 할 수 없습니다. – jasttim

관련 문제