从stringreader加载XML文档

时间:2017-08-14 13:46:28

标签: xml vb.net scripting wonderware

我是根据此网站上的讨论开始的: 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! <<<=== ******"));

注意:Indirect是一种变量,可以用作指向其他区域内容的指针,基本上是这样的:

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

创建对包含我在本文开头显示的字符串的内存区域的引用。 如何将此字符串加载到Xml文档中是我的问题的原因。 当我接到指令时:&#34; doc.Load(SR);&#34;我收到一个错误:

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

在我的无知中,我从来不知道我为了阅读Xml而指定了一个url,总是认为Xml是一个数据传输工具。 尝试在XmlDocument中加载Xml时是否有其他人有类似的错误? 非常感谢任何帮助或提示。 (完全声明System.IO.StringReader等的原因是由于Wonderware脚本语言中缺少Imports。除语言外,它支持.Net framework 4.5)

1 个答案:

答案 0 :(得分: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;