如何使用不同的(动态)节点名创建xml模板c#

时间:2015-01-19 11:29:17

标签: c# xml

我需要创建几个具有相同子节点的xml节点,但每个节点的名称应该是区别的。

<Rootnode>
<somename1>
<testFilename><![CDATA[some-name]]></testFilename>
<parentDirectory><![CDATA[some-path]]></parentDirectory>
</somename1>

<somename2>
<testFilename><![CDATA[some-diff-name]]></testFilename>
<parentDirectory><![CDATA[some-diff-path]]></parentDirectory>
</somename2>

<somename3>
<testFilename><![CDATA[some-diff-name]]></testFilename>
<parentDirectory><![CDATA[some-diff-path]]></parentDirectory>
</somename3>

</Rootnode>

那个&#34; somename&#34;将从另一个函数

获取为字符串

需要创建此节点的模板,因为节点数量为100 通过使用seralization我这样做

public class template1 
{        
    public template1()
    {            
    }
    private String Filename;
    private String Parentpath;
    public System.Xml.XmlCDataSection testFilename
    {
        get
        {
            return new System.Xml.XmlDocument().CreateCDataSection(Filename);
        }
        set
        {
            this.Filename = value.Value;

        }
    }
    public System.Xml.XmlCDataSection parentDirectory
    {
        get
        {
            return new System.Xml.XmlDocument().CreateCDataSection(Parentpath);
        }
        set
        {
            this.Parentpath = value.Value;
        }
    }
}


class Program
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 3; i++)//will vary as per the no. of nodes to be generated
        {
            XmlDocument xdoc = new XmlDocument();
            XmlCDataSection FCData, PCData;
            String fname, pname;
            fname = "some file name";
            FCData = xdoc.CreateCDataSection(fname);
            template1 a = new template1();
            a.testFilename = FCData;
            pname = "some path";
            PCData = xdoc.CreateCDataSection(fname);
            a.parentDirectory = PCData;

            Serialize(a);
        }

    }
    static public void Serialize(template1 t)
     {
        XmlSerializer serializer = new XmlSerializer(typeof(template1));
        using (TextWriter writer = new StreamWriter(@"C:\\abc\\xelname.xml",true))
        {
            serializer.Serialize(writer, t);
        }

    }
}

这个生成的输出文件需要不同的名称而不是那个template1

<?xml version="1.0" encoding="utf-8"?>
<template1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<testFilename><![CDATA[some file name0]]></testFilename>
<parentDirectory><![CDATA[some file name0]]></parentDirectory>
</template1>
<?xml version="1.0" encoding="utf-8"?>
<template1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<testFilename><![CDATA[some file name1]]></testFilename>
<parentDirectory><![CDATA[some file name1]]></parentDirectory>
</template1>
<?xml version="1.0" encoding="utf-8"?>
<template1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<testFilename><![CDATA[some file name2]]></testFilename>
<parentDirectory><![CDATA[some file name2]]></parentDirectory>
</template1>

以及如何忽略template1节点

的属性

1 个答案:

答案 0 :(得分:0)

为您的模板创建一个单独的XML文件,其中包含您要插入数据的某种特殊代码。例如:

<example value="[MyData]" />

创建一个方法,该方法接收所需的节点名称,并加载此XML文件并循环遍历它,检查每个值,属性等中的代码并将其替换为您的数据。将这些节点添加到具有提供名称的新根节点,或将根节点重命名为您提供的名称。

然后只需返回该节点树,随时可以在任何需要的地方附加。这允许您拥有多个模板,这些模板都包含相同的自定义&#34;字段&#34;被替换出来。