2016-09-01 5 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を使用する必要がP.S.。)

答えて

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"); 

これは、プレフィックスと名前空間xsixmlnsを持つ属性を書き込みます。これは名前空間宣言です。接頭辞は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を参照してください。これにより、オプションの名前空間宣言属性が除外され、まだ追加されていることが示されます。