2017-03-07 16 views
0

プロジェクトでは、TIA Portal V14、PLC/siemens環境に接続されているオープンAPIで動作するアプリケーションを作成しています。C#XML innertextの一部を検索して置換する

私は基本的にゼロからXMLファイルを構築しています。 これを達成するために、System.XMLを使用してテンプレートにコピーして、最終的にTiaポータルのオブジェクトを含むスクリーンを生成できるXMLファイルを作成するXMLブロックを含む独自のXMLライブラリファイルを作成しました。

私が遭遇している問題は、要素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てなされたものであり、

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.LINQを使用して、私は、ファイルを解析し、このコードを使用して、ちょうどそのビットに置き換えることができることを承知していますXmlDocument私はこのコードを使用することはできません。 私は$ TAGNAMEを置き換えるためにXmlDocumentをXDocumentに変換しようとしましたが、元に戻しましたが、それはどちらもうまくいきませんでした。

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に 'string'を使い、その文字列を操作します。 –

答えて

0

You'llは、InnerTextプロパティは、単純な文字列であることを把握String.Replace()は、目的の結果を得るために

関連する問題