2017-11-21 66 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> 

内の各「エンティティ」の下で様々な分野を持つことになり、比較的単純な構造であります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 

私は私の質問はかなり広範であることを理解けど

答えて

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を使うより簡単です。

もうひとつ一般的に言及する価値があることは、言語がかなり似ていて自動化されているので、あなたが何かをautoitでやる方法を見つけ出すことができたら、vbaやvbsで同じことをする方法vba/vbsで使用されているすべてのcomオブジェクトを使用できます。 vba/vbsがこのようなことをしたときSet oXml = CreateObject("Msxml2.DOMDocument") autoitでこれを行う:$oXml = ObjCreate("Msxml2.DOMDocument")

+0

私はautoitが完全なvbsサポートを持っていたことを知りませんでした。 IDEを使用できないときに開発するのはちょっと難しいです:/いつでもチャンスをつかむとあなたの提案を試してみましょう – jasttim

+0

私はそれが完全なvbsサポートを持っているかどうかわかりません。 comオブジェクトを同じ方法で使用します。また、自動化のための「ソート」IDEが必要な場合は、自分のサイトから[スクリプトエディタ](https://www.autoitscript.com/site/autoit-script-editor/downloads/)を入手することもできます。 – garbb

+0

スクリプトエディタを使用していますが、VS17にC#またはC++を記述しても同じレベルのデバッグはありません – jasttim

関連する問題