首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过msxsl命名空间进行转换

通过msxsl命名空间进行转换
EN

Stack Overflow用户
提问于 2013-12-17 11:26:03
回答 2查看 835关注 0票数 0

我使用XSLT转换模板,它与MSSQL数据库一起工作,其中我必须做一些复杂的计算。我在下面显示一段代码。重要的是方法GetZaloha。它返回我希望通过它输出xml的大型xml元素,但是obv。这种方法行不通。我试图通过xElem.ToString()将值作为字符串返回,但是结果是表示的(Ofc)。就像绳子一样。因此," <“和">”标记表示为转义>和<。有人知道如何为转换提供一些对象,这些对象将被表示为xml结构化文本吗?非常感谢。

代码语言:javascript
复制
<msxsl:script implements-prefix="utility" language="C#">
    <msxsl:assembly name="System"/>
    <msxsl:assembly name="System.Data"/>
    <msxsl:using namespace="System"/>
    <msxsl:using namespace="System.Xml"/>    
    <msxsl:assembly name="System.Core" />
    <msxsl:assembly name="System.Xml.Linq" />
    <msxsl:using namespace="System.Collections.Generic" />
    <msxsl:using namespace="System.Linq" />
    <msxsl:using namespace="System.Xml.Linq" />
    <![CDATA[
    public static XElement GetZaloha(string VariableSymbol)
    {
         XElement xElem = .....
         return xElem;
    }
    ]]>
  </msxsl:script>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

  <xsl:template match="CisloDokladu">
    <xsl:element name="CisloDokladu">
      <xsl:copy-of select="@*" />
      <xsl:apply-templates />
    </xsl:element>
    <xsl:variable name="VariabilniSymbol" select="./VariabilniSymbol"/>
      <xsl:element name="OdpoctyZaloh">
        <xsl:attribute name="ObjectType">List</xsl:attribute>
        <xsl:attribute name="ObjectName">OdpocetZalohy</xsl:attribute>
        <xsl:value-of select="utility:GetZaloha($VariabilniSymbol)" />
      </xsl:element>
  </xsl:template>
EN

回答 2

Stack Overflow用户

发布于 2013-12-17 11:54:19

您目前正在使用<xsl:value-of>将函数结果包含到您的XML中。这个标记总是通过(或多或少)从XML节点树中提取文本部分来使XML节点树变平。我建议你用

代码语言:javascript
复制
<xsl:copy-of select="utility:GetZaloha($VariabilniSymbol)" />

而是将完整的节点树(不作任何更改)复制到XML输出中。

票数 1
EN

Stack Overflow用户

发布于 2019-08-28 09:42:42

五年后,但自从我想出了解决办法之后,我还是把它发了出来。xsl引擎只接受一组有限的类型。XPathNavigator是一个,它允许将完整的xml子树从脚本返回到文档中。

下面是关于接受的返回类型https://learn.microsoft.com/en-us/dotnet/standard/data/xml/script-blocks-using-msxsl-script的更多信息

xsl

代码语言:javascript
复制
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:my-scripts="urn:my-scripts"
    exclude-result-prefixes="msxsl my-scripts"
>
<xsl:output method="xml"  encoding="UTF-8" indent="yes"  />

<msxsl:script language="C#" implements-prefix="my-scripts">
   <![CDATA[

    public static XPathNavigator createXmlNodes(string text)
    {

        //prepare DOM with doc elent named "root"
        XmlDocument doc = new XmlDocument();
        doc.LoadXml("<root/>");
        var root = doc.DocumentElement;

        //Add an element
        var elem = doc.CreateElement("token");
        elem.AppendChild(doc.CreateTextNode(text));
        root.AppendChild(elem);

        //Add an element
        elem = doc.CreateElement("token2");
        elem.AppendChild(doc.CreateTextNode(text));
        root.AppendChild(elem);

        //returnxpathNavigator, this will include "root"
        return root.CreateNavigator();

        // A second option using a string instead of a DOM
        //var sr = new  System.IO.StringReader("<token>" + text + "</token>");
        //var xp = new XPathDocument(sr);
        //return xp.CreateNavigator();

    }

    ]]>
</msxsl:script>

<!-- Ignore Input just call function using fixed text -->
<xsl:template match="/">
    <doc>

        <!-- the /* is there to skip the root element  --> 
        <xsl:copy-of  select="my-scripts:createXmlNodes('Hello World')/*"  />
    </doc>
</xsl:template>


</xsl:stylesheet >

空虚输入

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
    <empty/>

结果

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<doc>
  <token>Hello World</token>
  <token2>Hello World</token2>
</doc>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20632859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档