我有一个用这个算法编写的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>
我想过使用if语句,如:
foreach (string node in nodes){
if(node == "node1"){}
else{
writer.WriteStartElement(node);
writer.WriteEndElement();
XMLmethod()}
}
这成功地不会打印<node1>/<node1>
但它也会阻止它打印子节点。知道怎么做这个吗?
答案 0 :(得分:0)
如果您有一个类,例如下面的Foo,并且您想在使用.Net XmlSerializer进行序列化时省略一个或多个属性,请使用XmlIgnore属性:
public class Foo
{
[XmlIngore]
public string Node1 { get; set; }
public string Node2 { get; set; }
public string Node3 { get; set; }
}
这将导致XmlSerializer仅输出<node2>
和<node3>
。
答案 1 :(得分:0)
如果您发布的代码有效,您可以尝试在迭代之前从列表中删除项目,例如
nodes.Remove("node1");
foreach (string node in nodes)
{
}
但是,从您的代码示例中不清楚为什么要这样做。 XML文档以分层方式嵌套,因为它允许元素之间的关系和语义上下文。删除父节点可能会降低您正在生成的XML的可用性。
例如,如果文档是
<People>
<Person>
<FirstName>Max</FirstName>
<LastName>Smart</LastName>
</Person>
</People>
删除<Person>
代码并自行输出FirstName
和LastName
毫无意义。