【发布时间】:2011-06-24 08:25:27
【问题描述】:
当我使用 .NET 4 作为目标框架编译我的程序时遇到问题。排序不起作用。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Xsl;
namespace ExampleSortProblemServer
{
class Program
{
static void Main(string[] args)
{
// argument is the filename
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(args[0]);
XslCompiledTransform xslt = new XslCompiledTransform();
XmlResourceResolver resolver = new XmlResourceResolver(typeof (IReport));
xslt.Load(args[1]);
String foStr = CreateFO(xmlDocument, xslt, resolver);
Console.WriteLine(foStr);
}
public static string CreateFO(XmlNode doc, XslCompiledTransform xslt, XmlResolver resolver)
{
string fo;
using (var stringReader = new StringReader(doc.OuterXml))
{
using (var xmlTextReader = new XmlTextReader(stringReader))
{
using (var stringWriter = new StringWriter())
{
using (var xmlTextWriter = new XmlTextWriter(stringWriter))
{
try
{
xslt.Transform(xmlTextReader, null, xmlTextWriter, resolver);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
stringWriter.Flush();
fo = stringWriter.ToString();
}
}
}
}
return fo;
}
}
}
数据是“Datan.xml”:
<daten>
<employees>
<name>Knight</name>
<name>Cook</name>
<name>Superman</name>
<name>Yoda</name>
<name>Albright</name>
</employees>
</daten>
样式表是“Datan.xsl”:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="daten" select="*[local-name()='daten']"/>
<xsl:apply-templates select="$daten">
<xsl:sort select="normalize-space(*[local-name()='employees']/*[local-name()='name']" order="ascending"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
您可以使用以下方式调用该程序: ExampleSortProblemServer.exe Daten.xml Daten.xsl
预期的顺序应该是:
奥尔布赖特库克骑士超人尤达
知道什么是不正确的吗?
【问题讨论】:
-
连续的
using声明不需要花括号;如果你省略除了最里面的对之外的所有代码,代码的可读性会更高(在这种情况下,标准缩进也不会缩进连续的使用。 -
另外,XmlTextWriter 构造函数已被弃用,取而代之的是 XmlWriter.Create
-
最后,最好不要在辅助方法中进行一般异常日志记录;最好尽可能在全球范围内这样做。只捕获您可以实际修复的异常。
-
可读性取决于个人...解决问题的提示将不胜感激。
标签: .net xml xslt c#-4.0 xsl-fo