2016-09-01 8 views
0

나는 XmlWriter을 사용하고 있으며 다음 XML 태그를 만드는 데 어려움을 겪고 있습니다.C# XmlWriter 네임 스페이스 문제

<mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0_idx.xsd" version="1.1"> 

나는 다음과 같습니다

다음과 같은 결과
XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Indent = true; 

XmlWriter xmlWriter = XmlWriter.Create(xmlFilePath, settings); 

xmlWriter.WriteStartDocument(); 

xmlWriter.WriteStartElement("mzML", "xmlns", @"http://psi.hupo.org/ms/mzml"); 

xmlWriter.WriteAttributeString("xsi", "xmlns", @"http://www.w3.org/2001/XMLSchema-instance"); 

xmlWriter.WriteAttributeString("schemaLocation", "xsi", @"http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd"); 

xmlWriter.WriteAttributeString("version", "1.1"); 

xmlWriter.WriteEndElement(); 

xmlWriter.WriteEndDocument(); 

xmlWriter.Close(); 

:

<mzML:xmlns p1:xsi="http://www.w3.org/2001/XMLSchema-instance" p2:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd" version="1.1.0" xmlns:p2="xsi" xmlns:p1="xmlns" xmlns:mzML="http://psi.hupo.org/ms/mzml"> 

문서 나를 혼란; 위 코드의 변형을 많이 시도했지만 타겟 XML 태그 가까이에있는 것처럼 보이지 않습니다.

아무도 도와 줄 수 있습니까?

은 (추신 : 나는 때문에 내가 만드는 데 필요한 XML 파일의 크기에 XmlWriter를 사용해야합니다.)

답변

1

이 매우 혼란스러워 보인다. 우리가 차례로 각 라인을 통해 이동하는 경우 :

xmlWriter.WriteStartElement("mzML", "xmlns", @"http://psi.hupo.org/ms/mzml"); 

를 이것은 당신의 요소는 접두사 mzML 및 로컬 이름 xmlnshttp://...의 네임 스페이스가 지정합니다. 요소에 접두어가없고 로컬 이름mzML이어야합니다.

xmlWriter.WriteAttributeString("xsi", "xmlns", 
    @"http://www.w3.org/2001/XMLSchema-instance"); 

이 접두사 xsi 및 네임 스페이스 xmlns와 속성을 기록합니다. 이것은 네임 스페이스 선언입니다. 접두사는 xmlns이고 로컬 이름은 xsi이고 네임 스페이스는 null이어야합니다. 또한 네임 스페이스 선언 특성을 쓰는 것은 XmlWriter에 의해 자동으로 처리됩니다. 일반적으로 어떤 요소가 어떤 순서로 발생하는지 제어하고 싶다면 명시 적으로 작성해야합니다.

xmlWriter.WriteAttributeString("schemaLocation", "xsi", 
    @"http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd"); 

이 이름 schemaLocation (올바른)와 네임 스페이스 xsi와 속성을 기록합니다. 이것은 올바르지 않으며 네임 스페이스는 http://www.w3.org/2001/XMLSchema-instance입니다.

xmlWriter.WriteAttributeString("version", "1.1"); 

올바른 내용입니다. 이러한 모든 변경 사항을 함께 퍼팅

:

xmlWriter.WriteStartElement("mzML", @"http://psi.hupo.org/ms/mzml"); 

// these two lines are optional - the namespace declarations are 
// automatically inserted as the *last* attributes when omitted 
xmlWriter.WriteAttributeString("xmlns", null, null, "http://psi.hupo.org/ms/mzml"); 

xmlWriter.WriteAttributeString("xmlns", "xsi", null, 
    "http://www.w3.org/2001/XMLSchema-instance"); 

xmlWriter.WriteAttributeString("xsi", "schemaLocation", 
    "http://www.w3.org/2001/XMLSchema-instance", 
    "http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd"); 

xmlWriter.WriteAttributeString("version", "1.1"); 

는 작업 데모 this fiddle를 참조하십시오. 이것은 선택적인 네임 스페이스 선언 속성을 제거하여 여전히 추가되도록 표시합니다.