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