如何使用xslt -1.0
设置SOH和ETX我已经尝试了很多方法来达到输出,因为数字代码不接受这个xslt-1.0,这里的编码是utf-8。
如何在其中使用此十六进制代码...它无法正常工作我需要做什么才能使其正常工作
SOH:
ETX:
我在下面尝试了一个也是为了达到最终的输出但是它不是..很多人提出了一些建议... nah
<?xml version="1.0" encoding="US-ASCII" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:char="java.lang.Character" version="1.0">
<xsl:output method="text" encoding="US-ASCII" />
<xsl:template match="/">
<xsl:value-of select="char:toString(1)"></xsl:value-of>
</xsl:template>
</xsl:stylesheet>
我在我的xslt中应用了上述逻辑,当我使用它时抛出错误:
XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}运行时,XPathNavigator {urn:schemas-microsoft-com:xslt-debug} current,Double {urn:schemas-microsoft-com:xslt-debug} position ,Double {urn:schemas-microsoft-com:xslt-debug} last,IList`1 {urn:schemas-microsoft-com:xslt-debug}名称空间
并且文件正在创建0KB
<xsl:value-of select="char:toString(1)">
如果只是评论它工作正常......
这里是xslt
<?xml version="1.0" encoding="us-ascii"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:char="java.lang.Character" version="1.0" >
<xsl:output method="text" indent="no" omit-xml-declaration ="yes" encoding="us-ascii"/>
<xsl:param name="PackageId" />
<xsl:param name="SequenceNum" />
<xsl:template match="/">
<xsl:value-of select="char:toString(1)"></xsl:value-of>
<xsl:apply-templates mode="block1" select="NewDataSet/Table1[CTC_PACKAGE_ID =$PackageId][position()=1]"/>
<xsl:apply-templates mode="block2" select="NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][CTD_SEQ_NUM =$SequenceNum]"/>
</xsl:template>
<xsl:template mode="block1" match="Table1">
...some code....
</xsl:template>
<xsl:template mode="block2" match="Table">
...some code....
</xsl:template>
答案 0 :(得分:1)
我不确定你有什么例外,因为你所展示的内容似乎并不完整。 0x01不是有效的Xml字符,这可能是异常的原因。我创建了一个略有不同的样式表版本,如下所示:
<?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:myScripts="myScripts">
<xsl:output method="text" indent="yes"/>
<msxsl:script implements-prefix="myScripts" language="C#">
public string SOH()
{
return '\u0001'.ToString();
}
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="myScripts:SOH()"></xsl:value-of>
</xsl:template>
</xsl:stylesheet>
为了防止它因无效字符而失败,我需要在写入响应的编写器中禁用字符检查:
var xslt = new XslCompiledTransform();
xslt.Load(@"C:\Temp\xsl.xsl", new XsltSettings() { EnableScript = true }, null);
var xml = new XPathDocument(new StringReader("<root/>"));
var writerSettigns = xslt.OutputSettings.Clone();
writerSettigns.CheckCharacters = false;
xslt.Transform(xml, XmlWriter.Create(Console.Out, writerSettigns));
导致以下输出:
☺Press any key to continue . . .
正如你所看到的那样,字符被写入输出中没有例外。