Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我要选择XSLT或XQuery来生成html文档?_C#_Xslt_Xquery_Saxon - Fatal编程技术网

C# 为什么我要选择XSLT或XQuery来生成html文档?

C# 为什么我要选择XSLT或XQuery来生成html文档?,c#,xslt,xquery,saxon,C#,Xslt,Xquery,Saxon,我正在研究使用微软的xslcomiledtransform的替代方案,似乎所有的东西都主要指向Saxon,其次是XQSharp。当我开始查看Saxon的文档时,我发现XQuery可以做与我的XSLT相同的事情,这与XQuery的标记非常简洁 XSLT与XQuery相比有哪些优点值得使用更详细的语法 是否可以创建模板功能?一般来说,有很多重叠;两者都植根于底层XPath实现中。至于是使用XSLT还是XQuery,证据就在布丁上:XSLT更擅长转换,而XQuery更擅长查询 因此,将XQuery用于

我正在研究使用微软的
xslcomiledtransform
的替代方案,似乎所有的东西都主要指向Saxon,其次是XQSharp。当我开始查看Saxon的文档时,我发现XQuery可以做与我的XSLT相同的事情,这与XQuery的标记非常简洁

XSLT与XQuery相比有哪些优点值得使用更详细的语法


是否可以创建模板功能?

一般来说,有很多重叠;两者都植根于底层XPath实现中。至于是使用XSLT还是XQuery,证据就在布丁上:XSLT更擅长转换,而XQuery更擅长查询

因此,将XQuery用于:

  • 更小、更不复杂的事情
  • 高度结构化的数据(XQuery是非常强类型的,并且易于抱怨)
  • 数据库中的数据
  • 提取一小段信息
相反,将XSLT用于:

  • 仅复制增量更改的文档
  • 更大、更复杂的事情
  • 结构松散(或糟糕)的数据

XSLT和XQuery做两件不同的事情。顾名思义,XSLT用于将数据从一种形式转换为另一种形式(例如从XML转换为HTML)。另一方面,XQuery是一种用于从XML文档中查找和提取特定XML节点的语言,可以用于任何目的


XSLT实际上依赖于XQuery的功能,请看上的教程;如果正确使用,它们都是非常强大的技术。

XSLT设计用于获取一个xml文档,并将其转换为其他内容,例如csv、html或其他xml格式,例如xhtml

XQuery设计用于从一个或多个xml文档中提取信息,并将结果合并到一个新的xml文档中

XQuery和XSLT都严重依赖XPath。如果您的输出基于一个输入xml文档和一个输出xml文档,那么这两个文档几乎可以互换

XQuery的FLWR语法非常直观,如果您有SQL背景,在处理单输入/单输出情况时,IMO XSLT是更强大的语言,特别是在输出不是xml的情况下

就我个人而言,我发现基于xml的语法和XSLT的声明性质稍微难以阅读和维护


这实际上可以归结为选择,尽管使用XQuery进行“简单”格式设置有点不寻常。如果您的输入基于多个xml文档,那么您将非常依赖XQuery,如果您的输出不基于xml,那么您将非常依赖XSLT。

远离
XslCompiledTransform
的最大原因是它仅仅是一个XSLT1.0处理器

XSLT2.0和XQuery1.0的大部分功能是重叠的,并且在很大程度上它们是具有不同语法的类似语言(有点像C#和VB)

XSLT要详细得多,但是它的模板特性添加了很多功能,这些功能在XQuery中复制起来相当麻烦,尤其是对节点树进行一些小的更改。XQuery中特别麻烦的主要功能是

只要不需要模板功能,XQuery的语法(IMHO)就更清晰,我发现它更适合于更高级的计算和从大型文档检索数据

XQuery通常被视为一种数据库语言。虽然很多数据库都以这种方式使用它,但它并不是唯一的用途。该语言在数据库中的某些实现非常有限。另一位评论员声称XQuery是“非常强类型的”。除非您使用的是静态类型特性,否则XQuery的强类型并不比XSLT强。虽然一些数据库实现迫使您使用静态类型特性,但大多数其他实现正在远离这一点

他还声称XQuery对于“更大、更复杂的事情”不是很好。我的论点正好相反。语法的简洁性和独特性使得在XQuery中编写复杂的函数和计算变得容易得多。我用XQuery写了一篇文章,感觉很自然;我认为用XSLT编写计算上如此复杂的东西要困难得多(当然更详细)

总之:

XSLT更适合于转换。如果您有一个结构大致正确的文档,并且希望转换组件,例如呈现XML文件的HTML版本,则效果更好

对于从各种来源构建新的XML文档或更改文档结构,XQuery更为自然


请注意,重叠相当大,通常没有“正确”的选择,但如果您做出了错误的选择,那么您可能会发现自己与纹理背道而驰。

为什么要研究替代方案?您对XslCompiledTransform有什么问题?如果没有这一点,微软的工具将在许多有效的XSL输入上失败,请尝试转换一个文档,其中包含需要&s的查询字符串。我不同意你的说法,即XQuery是非常强类型的,不适合处理更大更复杂的事情。奥利弗:我只是从主观角度比较了XQuery和XSLT之间的关系。也就是说,我认为XSLT更适合大型作业,但这并不意味着我认为XQuery不适合大型作业。我认为序列的使用,例如($s, ;”,concat(…)允许文本输出,而不是XML,因此可以将其用作文本模板处理器。通常,关闭XML声明的选项也很有用。请更新