2012-09-07 3 views
0

기본적으로 다른 XmlDocument 안에 XmlDocument를 삽입하는 방법을 알고 싶습니다.Xml in Xml

첫 번째 XmlDocument에는 기본 머리글 및 바닥 글 태그가 있습니다. 두 번째 XmlDocument는 첫 번째 XmlDocument에 삽입해야하는 body/data 태그입니다.

  string tableData = null; 
      using(StringWriter sw = new StringWriter()) 
      { 
       rightsTable.WriteXml(sw); 

       tableData = sw.ToString();      
      } 

      XmlDocument xmlTable = new XmlDocument(); 
      xmlTable.LoadXml(tableData); 

      StringBuilder build = new StringBuilder(); 
      using (XmlWriter writer = XmlWriter.Create(build, new XmlWriterSettings { OmitXmlDeclaration = true })) 
      { 
       writer.WriteStartElement("dataheader"); 

       //need to insert the xmlTable here somehow 

       writer.WriteEndElement(); 
      } 

더 쉬운 해결책이 있습니까?

+1

CDATA는 무엇으로 포함합니까? – jtheman

+0

외부 XML 노드 내부에서 CDATA 섹션을 사용하면 내부 XML 문서를 배치 할 수 있습니다. –

답변

1

문서 파서에서 importNode 기능을 사용하십시오.

+0

'importNode'는 무엇을 성취해야합니까? – Oded

1

CDATA 섹션에 내부 XML 파일을 작성해야합니다.

해당 노드에 writer.WriteCData을 사용하고 내부 XML을 텍스트로 전달합니다.

writer.WriteCData(xmlTable.OuterXml); 

또 다른 옵션 (thanks DJQuimby)이 일부 XML 호환되는 형식 (예를 들어 64 기수)에 대한 XML 인코딩하는 것입니다 - 인코딩이 XML 호환되어야합니다 사용주의 일부 인코딩 방식은의 크기를 증가 할 것으로 인코딩 된 문서 (base64는 ~ 30 %를 추가합니다).

+0

전에 이런 종류의 작업을 수행하지 않았기 때문에 대답을 직접 제공하고 싶지 않지만 OP가 XmlDocument의 요소에 내부 XML을 인코딩 할 수 있습니까? –

+0

@DJQuimby - 다른 옵션입니다. – Oded

1

난 당신이 정말 찾고있는하지만,이 두 XML 문서를 (Linq2xml를 사용하여 병합하는 방법을 보여 할 수 있는지 확실하지 않다)

string xml1 = 
    @"<xml1> 
    <header>header1</header> 
    <footer>footer</footer> 
    </xml1>"; 

string xml2 = 
    @"<xml2> 
    <body>body</body> 
    <data>footer</data> 
    </xml2>"; 

var xdoc1 = XElement.Parse(xml1); 
var xdoc2 = XElement.Parse(xml2); 

xdoc1.Descendants().First(d => d.Name == "header").AddAfterSelf(xdoc2.Elements()); 

var newxml = xdoc1.ToString(); 

OUTPUT

<xml1> 
    <header>header1</header> 
    <body>body</body> 
    <data>footer</data> 
    <footer>footer</footer> 
</xml1>