2017-03-07 1 views
0

프로젝트의 경우 TIA 포털 V14, PLC/siemens 환경에 연결된 공개 API로 작동하는 앱을 만듭니다.C# XML innertext 일부 찾기 및 바꾸기

이 응용 프로그램에서는 기본적으로 처음부터 XML 파일을 작성하고 있습니다. 이 작업을 수행하기 위해 System.XML을 사용하여 템플릿으로 복사 할 수있는 XML 블록이 포함 된 자체 XML 라이브러리 파일을 만들어 Tia 포털의 개체가 포함 된 화면을 생성 할 수있는 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 라이브러리의 일부입니다. 아래쪽에 DB_Stat_obj라는 원시 텍스트를 포함하는 ObjectName이라는 요소가 있습니다. $ 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이 코드를 사용할 수 없습니다. XDocument를 XDocument로 바꾸어 $ TAGNAME을 바꾸고 다시 변환하려고 시도했지만 그 중 하나도 작동하지 않았습니다. 나는 다른 사람이에 awnser을 가지고 희망 올바른 방향으로 날 지점 수

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; 당신이 사용할 수 있도록 내가

// 제론

를 찾을에서 System.Xml에게

감사를 사용하여 innerText와의 일부를 대체 어떻게 찾을 수 있습니까

+0

그렇지 않습니다. InnerText에'string'을 사용하고 그 문자열을 조작하십시오. –

답변

0

해야하는 요금, innerText와는 단순한 문자열 알아낼 String.Replace() 원하는 결과를 얻으려면