2010-01-25 2 views
0

ReplaceWith()를 사용하여 노드를 바꾸려고하지만 잘못된 형식의 XML (새 줄과 들여 쓰기가 없음)이 표시됩니다.XElement.ReplaceWith()에 의해 생성 된 형식이 잘못된 XML

이전에이 문제를 겪은 사람이 있습니까?


코드 조각 :

[Test] 
public void Test() 
{ 
    XDocument document; 

    using (var reader = XmlReader.Create("C:\\test.xml")) 
    { 
     // *** Running this line results in new lines OMITTED *** 
     document = XDocument.Load(reader); 

     // *** Running this line results in proper formatting *** 
     //document = XDocument.Parse(XDocument.Load(reader).ToString()); 

    } 

    var newNode = new XElement("Node", new XElement("SubNode")); 

    document.Root.Element("Node").ReplaceWith(newNode); 

    Console.Out.WriteLine("document = {0}", document); 
} 

이 단계 재현하기 :

1) C를 만듭니다 : \ test.xml의 다음과 :

<Test> 
    <Node/> 
<Test> 

2) 위 코드를 실행하십시오.

이 일부 잘못 형식의 XML의 일부가 발생합니다 :

<Test> 
    <Node><SubNode /></Node> 
</Test> 

3)의 주석이 라인 :

document = XDocument.Parse(XDocument.Load(reader).ToString()); 

4) 다시 조각을 실행합니다.

이 결과는 올바르게 포맷됩니다

<Test> 
    <Node> 
    <SubNode /> 
    </Node> 
</Test> 
+0

당신이 test.xml의 파일의 내용을 포함 할 수 있습니다 :

해킹 당신은 매우 효율적 아니지만, 그것을하는 빠른 방법은, 지정된? –

+0

수정 됨. 해당 파일의 내용은 단지 stung

답변

0

결과는 유효한 XML이다. 개행과 들여 쓰기는 XML에서는 중요하지 않습니다.

귀엽게 인쇄해야하는 경우 XML 조작을 마친 후에해야합니다.

+0

입니다. 공정하게, 그는 실제로 그것이 유효하지 않다고 주장하지 않았습니다. –

+0

@Mike : true - 나는 그것이 유효하다는 것을 강조하고 있으며, "형식"을 극복해야하며 그렇지 않으면 명시 적으로 형식을 지정해야한다. –

+0

@ 존 : 실제로 유효한 XML입니다. 하지만 ReplaceWith()가 동시에 형식을 엉망으로 만들 것이라고 기대하지 않았습니다! – stung

1

XElement/XDocument는 .Parse()를 사용하여 구문 분석하는 동안 xml을 "암시 적"으로 형식화하지만 명시 적으로 내용을 예쁘게 인쇄하는 방법은없는 것처럼 보입니다. 이것은 실제로 .net 프레임 워크에 대한 훌륭한 추가 기능입니다.

XDocument.Parse(XDocument.Load(reader).ToString()); 
관련 문제