2017-11-07 3 views
1

나는XML 파일의 여러 노드에서 데이터를 가져 오는 방법은 C#을 사용하여 다른 텍스트 파일에서 사용합니까?

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD with OASIS Tables v1.0 20120330//EN" "JATS-journalpublishing-oasis-article1.dtd"> 
<article article-type="proceedings" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://www.niso.org/standards/z39-96/ns/oasis-exchange/table"> 
<front> 
<journal-meta> 
<journal-id journal-id-type="publisher-id"/> 
<journal-title-group> 
<journal-title>Eleventh International Conference on Correlation Optics</journal-title> 
</journal-title-group> 
<issn pub-type="epub">0277-786X</issn> 
<publisher> 
<publisher-name>SPIE</publisher-name> 
</publisher> 
</journal-meta> 
<article-meta> 
<article-id pub-id-type="doi">10.236/12.205210</article-id> 
<title-group> 
<article-title>So you think you can dance?</article-title> 
</title-group> 
<contrib-group> 
<contrib contrib-type="author"> 
<name> 
<surname>Cena</surname> 
<given-names>John</given-names> 
</name> 
<xref ref-type="aff" rid="a1"><sup>a</sup></xref> 
</contrib> 
<contrib contrib-type="author" corresp="yes"> 
<name> 
<surname>Pal</surname> 
<given-names>G.S.</given-names> 
</name> 
<xref ref-type="aff" rid="a2"><sup>b</sup></xref> 
</contrib> 
<aff id="a1"><label><sup>a</sup></label>CNRS, France</aff> 
<aff id="a2"><label><sup>b</sup></label>MIT, USA</aff> 
</contrib-group> 
</article-meta> 
</front> 
<body> 
<sec id="S1"> 
<label>1.</label> 
<p>Today is your lucky day</p> 
</sec> 
<sec id="S2"> 
<label>2.</label> 
<p>Today is not so lucky</p> 
</sec> 
</body> 
</article> 

아래 내가 노드의 일부 (첫 번째 노드가 발견)의 내용을 가져 변수에 넣어 다음 정규식은 그들을 사용하여 대체 사용 묶는 것 같은입니다 샘플 XML 파일이 효율적인 방식으로 다른 TXT 파일. 좋은 방법이다 , 나는

XDocument doc=XDocument.Load(@"D:\MyFiles\1235-12-3053\230\124\124.xml",LoadOptions.PreserveWhitespace); 
       var s=from a in doc.Descendants("surname") 
        select a.First(); 
       var l=from x in doc.Descendants("label") 
        select x.First(); 
      ... so on 
    File.WriteAllText(@"C:\Desktop\text.txt", Regex.Replace(File.ReadAllText(@"C:\Desktop\text.txt"), @"<a>[^<]+</a>", @"<a>s</a>")); 
    File.WriteAllText(@"C:\Desktop\text.txt", Regex.Replace(File.ReadAllText(@"C:\Desktop\text.txt"), @"<b>[^<]+</b>", @"<b>l</b>")); 
    ... so on 

같은 것을 시도하고 그러나 First() 방법은 오류를주고, 또한 WriteAllText 많은 시간을 사용하고 계십니까? 한번에 여러 번 교체 할 수 있습니까?

답변

2

시도 뭔가해야한다.

UpdateText 파일 업데이트를 수행하는 방법이 있지만 그 방법에 익숙하지 않은 것 같습니다. 누군가 다른 방법으로 도움을 줄 수 있습니다.

+0

감사합니다. Tamal ... – Bumba

0

파일을 하드 드라이브에 여러 번로드하고 저장하는 대신 텍스트를 변수 (문자열)로로드하는 것이 좋습니다.

내가 기억할 때 regex를 사용하여 원하는대로 여러 패턴을 검색하고 바꿀 수 있으며 완전히 완료하면 파일을 저장합니다. 나는이 프로그램에서 원하는 제대로 이해하면이

XDocument doc=XDocument.Load(file,LoadOptions.PreserveWhitespace); 
    var s=(from a in doc.Descendants("surname") 
    select a).First().Value; 
    var l=(from x in doc.Descendants("label") 
    select x).First().Value; 
string text = File.ReadAllText(file); 
      text = Regex.Replace(text, @"<a>[^<]+</a>", @"<a>"[email protected]"</a>"); 
      text = Regex.Replace(text, @"<b>[^<]+</b>", @"<b>"[email protected]"</b>"); 
      File.WriteAllText(file, text); 

이 같은

+0

LINQ 부분은 무엇입니까? 어떻게 해결할 수 있을까요? – Bumba

+0

자세한 정보를 지정해야합니다. 어떤 오류가 발생합니까? – einord

+0

'System.Xml.Linq.XElement'에 'First'와 확장 메서드가없는 'System.Xml.Linq.XElement'유형의 첫 번째 인수를 허용하는 정의가 없다는 오류 메시지가 나타납니다 (사용 지시어 나 어셈블리 참조가 빠졌습니까?) ' – Bumba

관련 문제