2012-02-06 2 views
2

как установить SOH и ETX с помощью XSLT -1,0как использовать SOH и ETX в XSLT-1,0

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

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

SOH: 

ETX: 

Я попытался это ниже одного также для достижения результата, но это не было ..guys любезно предложить некоторые вещи ... 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}runtime, 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}namespaces

и файл создавал с 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

@Dimitre Novatchev Надеюсь, что вы знаете, что для вышеупомянутого, пожалуйста, помогите разобраться в этом, здесь я использую версию 1.0 и кодировку utf-8, я не могу использовать «» в файле xslt. – shannu

+0

+1 За то, что я знаю, кто, вероятно, ответит на этот вопрос :) –

+0

@Ates Goral я видел один из сайтов, с которыми он занимался SOH, но это было непонятно, вот почему я так сказал :), любым способом должен знать любую идею об этом, если вы так предложите мне – shannu

ответ

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 . . . 

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

+0

спасибо большое за ответ, я пробовал с вашим вводом, тогда я получил эта ошибка: не удается найти подходящую функцию 0-аргументов с именем {myScripts} SOH() – shannu

+0

Странно. Вы используете XslCompiledTransform? Вы можете показать полную трассировку стека? Я скопировал это из рабочего решения. – Pawel

+0

для того, чтобы заставить myscripts включить true, нам нужно назначить XslCompiledTransform transform = new XslCompiledTransform (true); transform.Load (strCID, новый XsltSettings() {EnableScript = true}, null); это нормально ?все же мне нужно делать какие-либо изменения в transform.transform (sampleCID.xml, xmlarglist, sw); – shannu