1

我有一个用这个算法编写的 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>,但它也阻止它打印子节点。知道我该怎么做吗?

4

2 回答 2

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>.

于 2012-10-01T01:29:11.883 回答
0

如果您发布的代码有效,您可以尝试在迭代之前从列表中删除项目,例如

nodes.Remove("node1");

foreach (string node in nodes)
{
}

但是,从您的代码示例中不清楚您为什么要这样做。XML 文档以分层方式嵌套,因为它允许元素之间的关系和语义上下文。删除父节点可能会降低您正在生成的 XML 的可用性。

例如,如果文档是

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

仅删除<Person>标签并自行输出FirstNameLastName没有意义的。

于 2012-10-01T01:39:16.190 回答