【发布时间】:2012-08-03 07:26:51
【问题描述】:
我有一个输入xml如下,
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<root>
<employee>
<firstname>Kaushal</firstname>
<lastname>Parik</lastname>
</employee>
<employee>
<firstname>Abhishek</firstname>
<lastname>Swarnkar</lastname>
</employee>
</root>
我需要将 xml 输出为
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<root>
<employee>
<firstname>Kaushal</firstname>
<lastname>Parik</lastname>
<status>Single</status>
</employee>
<employee>
<firstname>Abhishek</firstname>
<lastname>Swarnkar</lastname>
<status>Single</status>
</employee>
</root>
“status”的值在所有节点中都是“Single”....我知道如何通过c#代码添加这个静态文本“Single”....但是,我不知道如何添加通过 xslt 在 xml 中的节点“状态”......当我尝试时,它被添加到节点“名字”下方,而不是如图所示的预期位置......请帮助我如何实现这一点......我使用的 xslt 和 C# 代码是,
XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:myUtils="pda:MyUtils">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="employee/firstname">
<xsl:element name="firstname">
<xsl:value-of select="myUtils:FormatName(.)" />
</xsl:element>
<xsl:element name ="status">
<xsl:value-of select ="Single"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
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 吗?它看起来像一个非常简单的转换,代码很容易在代码中完成。
-
你可以参考我的answer to your question。
-
@Nirav:是的,这更好——尽管我认为值得从 all i> 你的答案。 (这真的没必要,而且看起来你只是渴望代表......)
-
@Nirav:谢谢你的帮助......
-
@JonSkeet:我绝对需要使用 xslt....我的代码应该可以工作....还是谢谢....