0

このサイトでの以前の議論に基づいて、これを開始しました: Find Sibling Attribute in XML document

私も Wonderware を使用しており、必要なタグを取得するために使用している文字列リーダーを持っています。私の文字列は次のようになります。

<ItemsList>
    <Item Name="soapsystemstaus" Alias="112MIX622_TIME.Barbe_Soap"/>
    <Item Name="strSystemDateTime" Alias="112MIX622_TIME.NowMinute"/>
</ItemsList>

これは私が実行しようとしているコードです:

dim ItemDBXMLString as string;
dim doc as System.Xml.XmlDocument;      
dim SR as System.IO.StringReader;
dim XdbInd as indirect;

XdbInd.BindTo( Me.DIO.Name + "." + Me.DIO.ScanGroup + ".AliasDatabase" );
ItemDBXMLString = XdbInd;

doc = new System.Xml.XmlDocument;   

SR = new System.IO.StringReader(ItemDBXMLString);

try
    doc.Load(SR);
    LogMessage(System.String.Format("SR Loaded into doc! <<<=== ******"));

注: 間接は、他の領域のコンテンツを参照するためのポインタとして使用できる変数のタイプです。基本的には次のとおりです。

XdbInd.BindTo( Me.DIO.Name + "." + Me.DIO.ScanGroup + ".AliasDatabase" );
ItemDBXMLString = XdbInd;

この投稿の冒頭で表示した文字列を含むメモリ領域への参照を作成します。この文字列を Xml ドキュメントにロードする方法が私の質問の理由です。命令にたどり着いたとき:「doc.Load(SR);」エラーが表示されます:

System.Xml: The URL cannot be empty. Parameter name: url

私の無知のせいで、Xml を読み取るために URL を指定する必要があることを知らなかったので、Xml はデータ転送ツールであると常に考えていました。XmlDocument 内で Xml を読み込もうとしたときに、他の誰かに同様のエラーが発生しましたか? どんな助けやヒントも大歓迎です。(System.IO.StringReader などの完全な宣言の理由は、Wonderware スクリプト言語に Imports がないためです。言語のほかに、.Net Framework 4.5 をサポートしています)

4

1 に答える 1

1

わかりましたので、最終的に方法を見つけました(すべて、特にvintasticに感謝します):

dim ItemDBXMLString as string;
dim SR as System.IO.StringReader; 
dim doc as System.Xml.XmlDocument;
dim XmlString as System.String;
dim XdbInd as indirect;

XdbInd.BindTo( Me.DIO.Name + "." + Me.DIO.ScanGroup + ".AliasDatabase" );
ItemDBXMLString = XdbInd;

doc = new System.Xml.XmlDocument();
SR = new System.IO.StringReader(ItemDBXMLString);

doc.LoadXml(ItemDBXMLString);
root = doc.DocumentElement; 
dim sTagTest as string;
dim sScanGroup as string;
sScanGroup = Me.DIO.ScanGroup;

' an = Field Attribute we are looking for
sTagTest = sScanGroup+isep+an;

'PLCTag = name of the tag on the PLC corresponding to 'an'
PLCTag = root.SelectSingleNode("/ItemsList/Item [translate(@Alias, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')='" + sTagTest.ToLower() + "']/@Name").InnerText;
于 2017-08-24T13:02:26.263 に答える