2013-10-18 1 views
1

기존 .xml 확장 파일의 내부 텍스트를 String으로 바꾸려고합니다.기존 XML 파일의 모든 문자열을 바꿉니 까?

왜 내가이 작업을 수행하고 있는가 : .xml 파일에서 이미지를 읽고 싶었습니다. 그러나 이미지는 .xml 파일의 기존 폴더에서 파일을로드하지 못했습니다. 이 문제를 해결하기 위해 여러 번 노력했습니다. 그리고 가능한 것은 이미지 파일 대상의 하드 경로를 지정하는 것뿐이었습니다. 그래서 나는이 시도하기 시작 : .xml 파일의 내부 문자열을 읽어

  1. - 해결을
  2. 는 XML 경로의 전체 부모 얻을 - 문자열로 XML과 수출 내부
  3. 읽기 텍스트를 해결을 -
  4. 을 해결 미해결 -
  5. 저장 모든 문자열을 교체하여 기존 .XML에 문자열 해결 -
  6. 후 존재 영역을 부모 경로를 넣어 해결 -
  7. 찾기 "<img src='는"문자열에서 영역을 존재?

"XML 파일의 이미지 표시"가 작업 목적입니다. 그러니 누군가가 미해결 된 기사에 응답하십시오. 그리고 Base64ToImage와 같은 메소드에 대해서는 제안하지 마십시오. 나는이 길로 가고 싶다. 희망은 여기에 내 대답을해야합니다.

기존 XML : 이 <helpRoot> <body Type="Section1"> <![CDATA[ <img src='Help1.png'/>
<h3 style="color:#2B94EA;font-family:open sans;">Section1</h3></hr>
<p style="color:#484848;font-family:open sans;">Text is shown</p> <h3 style="color:#3399FF;font-family:open sans;"> Image is not showing</h3></hr>
]]></body> <body Type="Section2"> <![CDATA[ <img src='Help2.png'/>
<h3 style="color:#2B94EA;font-family:open sans;">Section2</h3></hr>
<p style="color:#484848;font-family:open sans;">Text is shown</p> <h3 style="color:#3399FF;font-family:open sans;"> Image is not showing</h3></hr>
]]></body> ... </helpRoot>

새로운 XML 문자열 : <helpRoot> <body Type="Section1"> <![CDATA[ <img src='D:/Project/Image/Help1.png'/>
<h3 style="color:#2B94EA;font-family:open sans;">Section1</h3></hr>
<p style="color:#484848;font-family:open sans;">Text has showing</p> <h3 style="color:#3399FF;font-family:open sans;"> Image is showing</h3></hr>
]]></body> <body Type="Section2"> <![CDATA[ <img src='D:/Project/Image/Help2.png'/>
<h3 style="color:#2B94EA;font-family:open sans;">Section2</h3></hr>
<p style="color:#484848;font-family:open sans;">Text has shown</p> <h3 style="color:#3399FF;font-family:open sans;"> Image is not showing</h3></hr>
]]></body> ... </helpRoot>

+2

귀하의 질문은 매우 혼란 스럽습니다. XML 파일을 조작하고 싶다면 샘플 입력과 원하는 출력을 표시하면 도움이 될 것입니다. 여기에 문자열 바꾸기를 사용하지 않는 것이 좋습니다. XML API로 XML을 * XML로 조작하십시오. –

+0

문자열을 xml에 성공적으로 추가 한 5 번째 지점과 같이 새로 형성된 XML 파일을 저장하는 데 문제가 있습니까? – azmuhak

+1

예 .xml 파일의 텍스트 대신 "준비 됨"문자열을 저장하고 결과를 표시하려고했습니다. – mangasm

답변

0

내가 XDocumentHTMLAgilityPack

var xml = 
@"<base> 
    <child><![CDATA[<img src=""/path"" />]]></child> 
</base>"; 

var xDocument = XDocument.Parse(xml); 

var xChild = xDocument.Descendants("child").First(); 

var cData = xChild.Nodes().OfType<XCData>().First(); 

var htmlDocument = new HtmlDocument(); 

htmlDocument.LoadHtml(cData.Value); 

var imgNode = htmlDocument.DocumentNode.SelectSingleNode("img"); 

imgNode.Attributes["src"].Value = "/new/path"; 

using (var writer = new StringWriter()) 
{ 
    htmlDocument.Save(writer); 
    cData.Value = writer.ToString(); 
} 

xDocument을 사용하십시오 이제 포함

<base> 
    <child><![CDATA[<img src="/new/path">]]></child> 
</base> 
+0

예, XML 처리를 위해'XDocument'도 같이 사용합니다. 하지만 귀하의 질문에 나는 귀하의 문제가 정확히 무엇인지 모르겠습니다. – DeadDog

+0

귀하의 기여에 대해 @dav_i에게 감사드립니다. 그러나 XML 파일에는 많은 CDATA가 포함되어 있습니다. 그리고 모든 CDATA 안에 많은 수의 태그가 있습니다. 따라서 기존 XML 컨텐트를 처리 된 XML 문자열로 바꾸기를 원했습니다. 다른 제안 : – mangasm

+0

@mangasm 위의 모든 HTMLAgility 물건을 사용하지 않고, 내 [이전 버전] (http://stackoverflow.com/revisions/19444863/1)을 확인하십시오. –

관련 문제