通过xslt或C#代码添加xml节点

我有一个输入xml如下,

    Kaushal Parik   Abhishek Swarnkar   

我需要输出xml作为

     Kaushal Parik Single   Abhishek Swarnkar Single   

所有节点中“status”的值都是“Single”….我知道如何通过c#代码添加这个静态文本“Single”但是,我不知道如何添加节点“status” “在xml中通过xslt ….当我尝试时,它会被添加到节点”firstname“下面而不是在预期的位置如图所示….请帮助我如何实现这一点…. xslt和C#我使用的代码是,

XSLT:

                  

aspx.cs:

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; using System.IO; public partial class nirav : System.Web.UI.Page { public class MyXslExtension { public string FormatName(string name) { return "Mr. " + name; } public int GetAge(string name) { int age = name.Count(); return age; } } protected void Page_Load(object sender, EventArgs e) { string outputpath = "nirav.xml"; XsltArgumentList arguments = new XsltArgumentList(); arguments.AddExtensionObject("pda:MyUtils", new MyXslExtension()); using (StreamWriter writer = new StreamWriter(outputpath)) { XslCompiledTransform transform = new XslCompiledTransform(); transform.Load("http://localhost:4329/XsltTransform/nirav.xslt"); transform.Transform("http://localhost:4329/XsltTransform/nirav.xml", arguments, writer); } } } 

非常感谢您的帮助….

您的XSLT存在一些问题。 首先,这个表达是不正确的

  

这将选择元素Single的值,这在输入XML中不存在。 你真的想输出字面值’单’

  

或者更确切地说,你可以按原样输出整个元素

 Single 

其次,看起来您希望将状态添加为employee元素的最后一个元素。 在这种情况下,您需要一个模板来匹配employee元素,该元素复制所有现有元素,然后只添加新的status元素

    Single   

这是完整的XSLT

           Single    

应用于XML时,将输出以下内容

   Kaushal Parik Single   Abhishek Swarnkar Single   

(注意,我已经删除了对扩展function的引用,因为我自己的PC上没有这些function)。

个人认为使用XSLT对此有点过分。 我会用:

 XDocument doc = XDocument.Load("http://localhost:4329/XsltTransform/nirav.xml"); foreach (var employee in doc.Descendants("employee")) { employee.Add(new XElement("status", "Single")); } doc.Save(outputPath); 

当然如果你有其他理由使用XSLT,那很好 – 只是不要认为这是在.NET中修改XML的唯一方法:)

怎么样

      Single    

你可以使用linq到xml:

  var document = XDocument.Parse(xml); foreach (var element in document.Root.Elements("employee")) { element.Add(new XElement("status", "Single")); }