2011-09-15 2 views
1

안녕하세요 저는 XML 파일을 읽고 특정 노드의 값을 변경하는 다음 코드가 있지만 xmltextreader 또는 xmlreader를 사용하여 동일한 작업을 수행하려고합니다. 내 실제 파일을 직접 참조하는 문 doc.Save(System.Web.HttpContext.Current.Server.MapPath("Data/Example.xml"));.xmltextreader 또는 xmlreader를 사용하여 xml 파일을 구문 분석하고 업데이트하는 방법

XmlDocument doc = new XmlDocument(); 
        string xmlFile = System.Web.HttpContext.Current.Server.MapPath("Data/Example.xml"); 
        doc.Load(xmlFile); 
        XmlNodeList xmlnode = doc.GetElementsByTagName("value"); 
        xmlnode[0].ChildNodes[0].Value = 23; 
doc.Save(System.Web.HttpContext.Current.Server.MapPath("Data/Example.xml")); 
+0

+1하지만 어쨌든 질문은 어색하게 보이지만, * reader *를 사용하는 모든 것을 저장하는 것은 불가능합니다. 영어로 된 언어에 대한 나쁜 지식을 생각 나게합니다. –

답변

2

파일에 대한 참조가 있어야합니다. 그러나, 당신은 쉽게 간단하게 허용하도록 코드를 변경할 수 있습니다 (읽기 쓰기와 시크해야 것이다)를 Stream : 다소 추한

private static void ChangeDocument(Stream stream) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(stream); 
    XmlNodeList xmlnode = doc.GetElementsByTagName("value"); 
    xmlnode[0].ChildNodes[0].Value = 23; 
    stream.Position = 0; 
    doc.Save(stream); 
    stream.SetLength(stream.Position); // Truncate the file if it was longer 
} 

그것은이다, 틀림없이 ... 물론

당신은 항상 수 파일 이름 자체를 전달 - 당신의 MapPath 전화는 여전히 높은 수준의 방법에있을 것입니다, 당신이 달성하려고하는 모든 일 수있다 :

private static void ChangeDocument(string filename) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(filename); 
    XmlNodeList xmlnode = doc.GetElementsByTagName("value"); 
    xmlnode[0].ChildNodes[0].Value = 23; 
    doc.Save(filename); 
} 

마지막으로 따로 - 당신이 .NET 3.5 이상을 사용하는 경우를 , 우리를 강력히 추천합니다. LINQ to XML을 다소 멋진 XML API로 사용할 수 있습니다.

+0

doc.Save (...)를 숨기기위한 까다로운 방법? –

+0

그러면 파일에 대한 전체 경로는 Stream 객체를 선언하는 다른 코드에 있습니다. 어쨌든 파일 기반 접근 방식을 사용하는 것은 피할 수없는 일입니다. –

+0

@Artur : 예, 파일에 액세스하려면 이름이 필요합니다 알려진 어딘가 *. 나는 영업 이익이 여기에 계산되기를 원하지 않는다고 생각했는데, 이것은 완전히 합리적 일 수 있습니다. (예를 들어,이 코드는'Server.MapPath'가 부적절한 여러 응용 프로그램에서 사용되는 클래스 라이브러리에 넣을 수 있습니다.) –

1

당신은 쓸 수 없습니다 또는 업데이트 XML 데이터 XmlTextReader가 또는 XmlReader를 ansectors를 사용하여, 하여 XmlTextWriter 또는 XmlWriter를 조상, 해주 XmlSerializer.Serialize (..)의 대안으로 방법을 사용합니다. 당신은 문과 모두를 피할 수

당신이 다시 원점 파일로 변경된 노드를 작성해야하기 때문에, 실제 파일에 대한 직접 참조가
doc.Save(System.Web.HttpContext.Current.Server.MapPath("Data/Example.xml")); 

, 당신은 전환해야 otherwize (파일 기반 데이터 저장소를 사용하는 ASP.NET 웹 사이트)에서 데이터베이스 중심 접근 방식 (데이터베이스 서버를 사용하는 ASP.NET 웹 사이트)에 이르기까지 다양한 방식으로 시스템을 제어 할 수 있습니다.

SQL 서버에서 사용자 고유의 XML 데이터를 사용한 다음 ORM의 EF를 사용하여로드하고 업데이트하십시오.

관련 문제