как использовать SOH и ETX в xslt-1.0 - PullRequest
2 голосов
/ 06 февраля 2012

как установить SOH и ETX с помощью xslt -1.0

Я пробовал многочисленные способы получения результата, поскольку числовой код не принимает этот xslt-1.0, а здесь кодировка utf-8.

как использовать этот шестнадцатеричный код в нем ... он не работал, что мне нужно сделать, чтобы заставить его работать

SOH: 

ETX:

Я попробовал это ниже также для получения результирующего результата, но это не было .. ребята любезно предложили кое-что ... нет

<?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} текущий, Double {urn: schemas-microsoft-com: xslt-debug}, Double {urn: schemas-microsoft-com: xslt-debug} последний, 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>

1 Ответ

1 голос
/ 07 февраля 2012

Я не уверен, какое исключение вы имели, так как то, что вы показали, кажется неполным. 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 . . .

Как видите, символ был записан на выходе без исключения, и исключений не было.

...