2017-08-29 13 views
2

XML内のLocationタグを一致させて、場所タグのXMLコンテンツの「\」を「\\」に置き換えようとしていますが、どのようにすればよいかについての指導は誰でもできますか?"¥"と "¥¥"をXMLの特定のタグに置き換える方法は?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Threading.Tasks; 

namespace Matchlocationreplacebackslash 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string pattern = "<Location>(.*?)</Location>"; 
      string xmlcontent = @"<SoftwareProductBuild> 
         <BuildSource>QCA_DEV_POSTCOMMIT</BuildSource> 
         <BuiltBy>wbibot</BuiltBy> 
         <CreatedBy>wbibot</CreatedBy> 
         <Name>BTFM.CHE.2.1.2-00091-QCACHROM-1_NO_VARIANT</Name> 
         <Status>Approved</Status> 
         <BuiltOn>2017-08-28T13:00:04.345Z</BuiltOn> 
         <Tag>BTFM.CHE.2.1.2_BTFM.CHE.2.1.2-00091-QCACHROM-1_2017-08-28T13:00:04.345Z</Tag> 
         <SoftwareImageBuilds> 
          <SoftwareImageBuild> 
           <Type>LA</Type> 
           <Name>BTFM.CHE.2.1.2-00091-QCACHROM-1_NO_VARIANT</Name> 
           <Location>\\snowcone\builds676\INTEGRATION\BTFM.CHE.2.1.2-00091-QCACHROM-1</Location> 
           <Variant>NO_VARIANT</Variant> 
           <LoadType>Direct</LoadType> 
           <Target>NO_VARIANT</Target> 
           <SoftwareImages> 
            <SoftwareImage> 
             <Name>BTFM.CHE.2.1.2</Name> 
             <SoftwareProducts> 
              <SoftwareProduct> 
               <Name>MSM8998.LA.1.9</Name> 
               <BaseMeta>CI_MSM8998.LA.1.9-16991-INT-2</BaseMeta> 
              </SoftwareProduct> 
             </SoftwareProducts> 
            </SoftwareImage> 
           </SoftwareImages> 
          </SoftwareImageBuild> 
         </SoftwareImageBuilds> 
        </SoftwareProductBuild>"; 
      Match match = Regex.Match(xmlcontent, pattern); //Match location 
      //Replace "\" with "\\" in the xml content with the match 
      Console.ReadLine(); 
     } 
    } 
} 
+3

明確な要件を明記してください。 _を置き換えて "\"を "\" ... _それらは同じです。 – Sach

+0

私は問題のタイトルは、ダブルスラッシュに置き換えられた単一のスラッシュを望むという点でそれを持っていると思います。私たちのテキストエディタは、それを奇妙に処理しているかもしれません。問題については、これは "LINQを使用してXMLをトラバースし、インプレースで必要なものを変更する"ような問題を感じています。 –

+0

SOエディタの異常です - \\は\と表示されます。 \\ 012を入力して\\ – cup

答えて

4

正規表現は必要ありません。 SO読むためにポスト良い:PS

var xDoc = XDocument.Parse(xmlcontent); foreach(var loc in xDoc.Descendants("Location")) { loc.Value = loc.Value.Replace(@"\", @"\\"); } string newXml = xDoc.ToString(); 

Linq2XmlのようなXMLパーサーを使用してください。 RegEx match open tags except XHTML self-contained tags

0

あなたはこのコードを使用することができます:

var xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(xmlcontent); 
var locations = xmlDoc.GetElementsByTagName("Location"); 
foreach (XmlNode location in locations) 
{ 
    var newLocation = location.InnerText.Replace("\\", "\\\\"); 
    location.InnerText = newLocation; 
} 

あなたxmlcontentは、その後、あなたが書くことができます更新することが必要な場合:

xmlcontent = xmlDoc.OuterXml; 
関連する問題