gpt4 book ai didi

c# - XSLT:如何从 XSL 转换中输出 '<' 和 '>'?

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:24 25 4
gpt4 key购买 nike

我正在使用 XSL 转换从 XML 文档构建一些文本片段。输出中的文本可以包含“<”和“>”(以及其他特殊字符)。

给定以下 xml 作为 data.xml:

<SCH>
<Ship Id="1" Name="Dicke Bertha" OperatingCostsDay="10.0000000" currency="USD" />
</SCH>

和以下 xsl 作为 transformation.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:template match="/">
Schiff: <xsl:for-each select="SCH/Ship"> Id: <xsl:value-of select="@Id"/>&#160; <xsl:value-of select="@Name"/>&#160; (OC:<xsl:value-of select="@OperatingCostsDay"/>&#160;<xsl:value-of select="@currency"/>)
</xsl:for-each>Betriebskosten &#60; 500 USD oder &#62; 1 Mio. USD
</xsl:template>

</xsl:stylesheet>

加载 XSLT 时出现转义序列 <> 的问题:

var xslDocument = XDocument.Load("transformation.xslt");

转换后的输出并不像预期的那样带有“<”和“>”字符,但它具有 HTML 转义序列。

Schiff:  Id: 1  Dicke Bertha  (OC:10.0000000 USD)
Betriebskosten &lt; 500 USD oder &gt; 1 Mio. USD

我可以在这里做什么?

为了完整性,这里是完整的代码示例:

class Program
{
static void Main(string[] args)
{

var xslDocument = XDocument.Load("transformation.xslt");
var compiled = new XslCompiledTransform();
using (var reader = xslDocument.CreateReader())
{
compiled.Load(reader);
}
var xml = File.ReadAllText("data.xml");
Console.WriteLine(Transform(compiled, xml));
}

public static string Transform(XslCompiledTransform xsl, string xml)
{
// allow fragments
var writerSettings = new XmlWriterSettings { ConformanceLevel = ConformanceLevel.Auto };
var readerSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Auto };

var stringReader = new StringReader(xml);
var details = new StringBuilder();
using (var reader = XmlReader.Create(stringReader, readerSettings))
{
using (var writer = XmlWriter.Create(details, writerSettings))
{
xsl.Transform(reader, writer);
}
}

return details.ToString();
}

}

最佳答案

I am building some text snippets

如果您要输出文本,请将您的输出方法设置为文本。然后您的处理器将知道不要转义 XML 中保留的字符。

XSLT

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8" />

<xsl:template match="/">
Schiff: <xsl:for-each select="SCH/Ship"> Id: <xsl:value-of select="@Id"/>&#160; <xsl:value-of select="@Name"/>&#160; (OC:<xsl:value-of select="@OperatingCostsDay"/>&#160;<xsl:value-of select="@currency"/>)
</xsl:for-each>Betriebskosten &#60; 500 USD oder &#62; 1 Mio. USD
</xsl:template>

</xsl:stylesheet>

结果:

Schiff:  Id: 1  Dicke Bertha  (OC:10.0000000 USD)
Betriebskosten < 500 USD oder > 1 Mio. USD

另请注意,文字文本最好放在 xsl:text 指令中 - 否则您会将所有不需要的周围空白传递给输出。

关于c# - XSLT:如何从 XSL 转换中输出 '<' 和 '>'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44151725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com