2017-03-29 7 views
0

私はxsl transformのために以下のコードを使用しています。ここでSaxon API(saxon9HE)の出力が適切なxmlを生成しない

var processor = new Processor(); 


XsltCompiler xslComp = processor.NewXsltCompiler(); 
      XsltExecutable xslExec = xslComp.Compile(xslUri); 
      XsltTransformer xslTrans = xslExec.Load(); 
      XdmDestination xdmD = new XdmDestination(); 
      Serializer serializer = processor.NewSerializer(); 

      using (FileStream fs = File.Open(xmlPath, FileMode.Open)) 
      { 
       xslTrans.SetInputStream(fs, schemaUri); // set baseUri 
       xslTrans.Run(xdmD); 
      } 

      XdmNode value = null; 

      if (xdmD != null) 
      { 
       value = xdmD.XdmNode; 
      } 

サンプル入力XSLです:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:nf="urn:ietf:params:xml:ns:netconf:base:1.0" > 
    <xsl:output method="xml" indent="no"/> 

    <xsl:template match="/"> 
    <xsl:value-of select="concat('&lt;?xml',substring-after(//root/text(),'&lt;?xml'))" disable-output-escaping="yes" 
/> 
    </xsl:template> 
</xsl:stylesheet> 

サンプル入力XML:

<root> 
<![CDATA[ 

<?xml version="1.0" encoding="ISO-8859-1"?> 
<nf:rpc-reply xmlns:nf="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="http://www.cisco.com/nxos:1.0:vms"> 
<nf:data> 
    <show> 
    <svs> 
    <connections> 
     <conn-name>qa-gdc1</conn-name>   
    </connections> 
    </svs> 
    </show> 
</nf:data> 
</nf:rpc-reply> 

]]> 
</root> 

出力:

&lt?xml version="1.0" encoding="ISO-8859-1"?&gt 
&ltnf:rpc-reply xmlns:nf="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="http://www.cisco.com/nxos:1.0:vms"&gt 
&ltnf:data&gt 
    &ltshow&gt 
    &ltsvs&gt 
    &ltconnections&gt 
     &ltconn-name&gt;qa-gdc1&lt;/conn-name&gt  
    &lt/connections&gt 
    &lt/svs&gt 
    &lt/show&gt 
&lt/nf:data&gt 
&lt/nf:rpc-reply&gt 
+0

どのバージョンのSaxon HEですか? 9.7では、XPath 3 'parse-xml'を使用して埋め込みXMLを解析することができます。結果として' XdmNode'が期待されます。あなたがdisable-output-escapingに依存したいのであれば、結果が最初にシリアル化されていることを確認する必要があると思います。 –

答えて

2

(私はすでに民間の電子メールで説明したように)

disable-output-escapingはシリアライザへの命令です。したがって、結果ツリーがシリアル化されていない場合は効果がありません。 (シリアライザを作成していますが、変換先として使用していません)

関連する問題