2017-03-07 99 views
0

對於一個項目,我創建了一個可與TIA Portal V14,PLC/siemens環境連接的開放式API的應用程序。C#查找並替換部分XML innertextxt

對於這個應用程序,我基本上是從零開始構建一個XML文件。 爲了達到這個目的,我創建了自己的XML庫文件,其中包含了使用System.XML的XML塊,我可以將其複製到模板中以最終創建一個XML文件,該文件可以使用Tia Portal中的對象生成一個屏幕。

我遇到的問題是我似乎無法找到或想到一種方法來查找和替換一個一個元素innertext。

<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的元素,它包含了無縫文本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); 
      } 
     } 

我希望有另外一個awnser這個可以點我在正確的方向。

TL; DR;如何找到找到並使用的System.Xml

感謝替換的innerText的一部分,

//吉榮

+0

您不需要。爲InnerText使用「字符串」,然後對該字符串進行操作。 –

回答

0

You'll弄清楚,的innerText只是一個簡單的字符串,所以你可以使用String.Replace()實現所需的結果