对于项目,我正在创建一个应用程序,该应用程序与连接到TIA Portal V14,PLC / siemens环境的开放API一起使用。
对于这个应用程序,我基本上是从头开始构建一个XML文件。 为了实现这一点,我创建了自己的包含XML块的XML库文件,通过使用System.XML,我可以复制到模板中,最终创建一个XML文件,可以在Tia Portal中生成包含对象的屏幕。
我遇到的问题是,我似乎无法找到或想到一种方法来查找和替换元素内的件。
<VEG_Connection_Config>
<!-- Static Properties hold objects with properties that are always the same -->
<StaticProperties>
<!-- List of static objects -->
<GlobalLibraryObjects>
<!-- valve -->
<GlobalLibraryObject type="200" events="" properties="">
<Hmi.Screen.SymbolLibrary ID="2" CompositionName="ScreenItems">
<!-- valve -->
<AttributeList>
<AboveUpperLimitColor>255, 0, 0</AboveUpperLimitColor>
<BackColor>192, 192, 192</BackColor>
<BackFillStyle>Transparent</BackFillStyle>
<BelowLowerLimitColor>255, 255, 0</BelowLowerLimitColor>
<BlinkColor>0, 0, 255</BlinkColor>
<Enabled>true</Enabled>
<FillColorMode>Original</FillColorMode>
<FixedAspectRatio>false</FixedAspectRatio>
<Flashing>None</Flashing>
<FlashingOnLimitViolation>false</FlashingOnLimitViolation>
<Flip>None</Flip>
<ForeColor>0, 0, 0</ForeColor>
<Height>46</Height>
<Left>10</Left>
<ObjectName>DB_Stat_obj.$TAGNAME</ObjectName>
这是我的XML库的一小部分。在底部,您可以看到一个名为ObjectName的元素,它包含innertext DB_Stat_obj。$ TAGNAME
$ TAGNAME是我要用CSV文件读取的标记名替换的部分。 因此,最终结果应该是DB_Stat_obj.1000P01。
现在我的问题是,是否有人知道如何使用System.XML查找$ TAGNAME并将其替换为其他内容。
我知道使用System.XML.LINQ我可以解析整个文件并使用以下代码替换该位:
string keyword = "$TAGNAME";
var doc = XDocument.Load(screenLocation);
List<XElement> query = doc.Descendants().
Where(x => !x.HasElements &&
x.Value.IndexOf(keyword, StringComparison.InvariantCultureIgnoreCase) >= 0).ToList();
query.ForEach(n => n.Value = n.Value.Replace(keyword, objectName));
doc.Save(screenLocation);
但考虑到我的整个应用程序是使用System.XML / XmlDocument完成的,我无法使用此代码。 我已经尝试将XmlDocument转换为XDocument只是为了替换$ TAGNAME并将其转换回来,但是它也没有用。 转换下面的代码
public static XmlDocument ToXmlDocument(this XDocument xDocument)
{
var xmlDocument = new XmlDocument();
using (var xmlReader = xDocument.CreateReader())
{
xmlDocument.Load(xmlReader);
}
return xmlDocument;
}
public static XDocument ToXDocument(this XmlDocument xmlDocument)
{
using (var nodeReader = new XmlNodeReader(xmlDocument))
{
nodeReader.MoveToContent();
return XDocument.Load(nodeReader);
}
}
我希望别人对此有一个了解,并指出我正确的方向。
TL; DR;如何使用SYSTEM.XML找到并替换innertext的一部分
谢谢,
// Jeroen
答案 0 :(得分:0)
你会发现InnerText只是一个简单的字符串,所以你可以使用String.Replace()来实现所需的结果