2012-10-01 56 views
1

我有與此算法寫成XML文檔:C#省略節點XML

public XMLmethod(){ 
string[] nodes = { "node1", "node2", "node3" }; //etc etc 

XmlTextWriter writer= new XmlTextWriter("file.xml", Encoding.UTF8); 

writer.WriteStartDocument(); 
writer.WriteStartElement("root"); 

foreach (string node in nodes){ 
writer.WriteStartElement(s); 
writer.WriteEndElement(); 
XMLmethod()} 

writer.WriteEndElement(); 
writer.WriteEndDocument(); 
} 

上面是一個簡化的版本。但是,我希望能夠在將它們打印到xml之前篩選出一些節點。

例如:

<root> 
<node1> 
    <node2> </node2> 
    <node3> </node3> 
</node1> 
<root> 

說我想過濾<node1> </node1>

所以它看起來像這樣

<root> 
<node2></node2> 
<node3></node3> 
</root> 

所以還是想打印的孩子<node2></node2><node3></node3>

我壽ught有關使用if語句,如:

foreach (string node in nodes){ 
if(node == "node1"){} 
else{ 
writer.WriteStartElement(node); 
writer.WriteEndElement(); 
XMLmethod()} 
} 

這種成功不打印<node1>/<node1>但同時也會停止從打印子節點。任何想法我怎麼能做到這一點?

+1

從這個代碼,你怎麼知道'node2'和'node3'是node1'的'孩子。 – swiftgp

回答

0

如果你有一個類,如下面的Foo,並且要使用.net XmlSerializer serialzing當它缺少一個或多個屬性,使用XmlIgnore屬性:

public class Foo 
{ 
    [XmlIngore] 
    public string Node1 { get; set; } 
    public string Node2 { get; set; } 
    public string Node3 { get; set; } 
} 

這將導致XmlSerializer的到僅輸出<node2><node3>

0

如果您發佈作品的代碼,你很可能嘗試迭代之前從列表中刪除的項目,例如

nodes.Remove("node1"); 

foreach (string node in nodes) 
{ 
} 

但是,它從您的代碼示例不清楚你爲什麼會想這樣做。 XML文檔以層次方式嵌套,因爲它允許元素之間的關係和語義上下文。刪除父節點可能會降低您正在生成的XML的可用性。

例如,如果該文件是

<People> 
    <Person> 
    <FirstName>Max</FirstName> 
    <LastName>Smart</LastName> 
    </Person> 
</People> 

這也就沒有什麼意義,只是去掉<Person>標籤,並輸出FirstNameLastName自己。