c# – cdata-section-elements不工作

c# – cdata-section-elements不工作,第1张

概述我试图通过设置全局参数在通过XSLT(使用Saxon-HE v9.7.0.14)生成的xml文件中设置密码. 密码可以包含任何字符,因此需要将其放在CDATA部分中. 我试图通过设置我的xslt的xsl:output元素的cdata-section-elements属性来包含密码元素的名称来实现这一点: <xsl:output method="xml" indent="yes" cdata-sec 我试图通过设置全局参数在通过XSLT(使用Saxon-HE v9.7.0.14)生成的xml文件中设置密码.

密码可以包含任何字符,因此需要将其放在cdaTA部分中.

我试图通过设置我的xslt的xsl:output元素的cdata-section-elements属性来包含密码元素的名称来实现这一点:

<xsl:output method="xml" indent="yes" cdata-section-elements="password"/>

这不起作用.我在下面列出了示例代码,输入,xslt,当前输出和所需输出.

在cdaTA部分中需要更改以获取密码?

程序:

using System;using System.IO;using Saxon.API;namespace XsltTest {    class Program {        static voID Main(string[] args) {            var xslt = new fileInfo(@"transform.xslt");            var input = new fileInfo(@"input.xml");            var output = new fileInfo(@"output.xml");            var processor = new Processor();            var compiler = processor.NewXsltCompiler();            var executable = compiler.Compile(new Uri(xslt.Fullname));            var transformer = executable.Load();            var destination = new DomDestination();            using (var inputStream = input.OpenRead()) {                               transformer.SetinputStream(inputStream,new Uri(Path.GetTempPath()));                transformer.SetParameter(                    new Qname("password"),new XdmAtomicValue("secret"));                transformer.Run(destination);            }            destination.Xmldocument.Save(output.Fullname);        }    }}

transform.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">  <xsl:output method="xml" indent="yes" cdata-section-elements="password"/>  <xsl:param name="password" />  <xsl:template match="@* | node()">    <bar>      <username>        <xsl:value-of select="//username"/>      </username>      <password>        <xsl:value-of select="$password"/>      </password>    </bar>  </xsl:template></xsl:stylesheet>

input.xml文件:

<?xml version="1.0" enCoding="utf-8" ?><foo>  <username>john</username></foo>

与Output.xml:

<bar>  <username>john</username>  <password>secret</password></bar>

密码不会放在cdaTA部分内.

期望的结果:

<bar>  <username>john</username>  <password><![cdaTA[secret]]></password></bar>
解决方法 xsl:output上的选项会影响序列化程序的 *** 作,如果输出未序列化,则它们不起作用.您正在写一个DomDestination而不是一个Serializer(然后使用DOM方法序列化DOM,这些方法对XSLT xsl:output声明一无所知).

在任何情况下,你的前提都是错误的:“密码可以包含任何字符,因此需要将其放入cdaTA部分.”如果没有cdata-section-elements,将使用实体引用(例如& lt;)序列化特殊字符.和& amp ;,这应该工作得很好.

总结

以上是内存溢出为你收集整理的c# – cdata-section-elements不工作全部内容,希望文章能够帮你解决c# – cdata-section-elements不工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存