C# 通过msxsl名称空间进行转换
我正在使用XSLT转换模板,它与MSSQL数据库一起工作,我必须在其中进行一些复杂的计算。我在下面展示了一段代码。重要的是GetZaloha方法。它返回一个大的xml元素,我希望通过它来输出xml,但是obv。这种方法不起作用。我试图通过xElem.ToString()以字符串形式返回值,但结果以字符串形式表示(ofc.)。因此“”标记表示为转义的>和<。 有人知道如何为转换提供一些对象,这些对象将表示为xml结构化文本吗?多谢各位C# 通过msxsl名称空间进行转换,c#,xml,xslt,C#,Xml,Xslt,我正在使用XSLT转换模板,它与MSSQL数据库一起工作,我必须在其中进行一些复杂的计算。我在下面展示了一段代码。重要的是GetZaloha方法。它返回一个大的xml元素,我希望通过它来输出xml,但是obv。这种方法不起作用。我试图通过xElem.ToString()以字符串形式返回值,但结果以字符串形式表示(ofc.)。因此“”标记表示为转义的>和<。 有人知道如何为转换提供一些对象,这些对象将表示为xml结构化文本吗?多谢各位 <msxsl:script implements
<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>
列表
奥德波切扎洛伊
您当前正在使用
将函数结果包含到XML输出中。该标记总是通过(或多或少地)从XML节点树中提取文本部分来展平XML节点树。我建议你使用
<xsl:copy-of select="utility:GetZaloha($VariabilniSymbol)" />
相反,它将完整的节点树(无需更改)复制到XML输出中。您当前正在使用
将函数结果包含到XML输出中。该标记总是通过(或多或少地)从XML节点树中提取文本部分来展平XML节点树。我建议你使用
<xsl:copy-of select="utility:GetZaloha($VariabilniSymbol)" />
相反,它将完整的节点树(无需更改)复制到XML输出中。您当前正在使用
将函数结果包含到XML输出中。该标记总是通过(或多或少地)从XML节点树中提取文本部分来展平XML节点树。我建议你使用
<xsl:copy-of select="utility:GetZaloha($VariabilniSymbol)" />
相反,它将完整的节点树(无需更改)复制到XML输出中。您当前正在使用
将函数结果包含到XML输出中。该标记总是通过(或多或少地)从XML节点树中提取文本部分来展平XML节点树。我建议你使用
<xsl:copy-of select="utility:GetZaloha($VariabilniSymbol)" />
相反,它将完整的节点树(无需更改)复制到XML输出中。一些解决方案:使用XSLT转换扩展对象写入输出XML,并使用XmlWriter方法WriteData: public class CDataWriter { public static XDocument Transform(XDocument doc, string fileXslt) { XsltArgumentList xslArg = new XsltArgumentList(); XslCompiledTransform trans = new XslCompiledTransform(); trans.Load(fileXslt); XDocument xmlOutput = new XDocument(); using (var writer = xmlOutput.CreateWriter()) { CDataWriter info = new CDataWriter(writer); xslArg.AddExtensionObject("urn:cdata", info); trans.Transform(input: doc.CreateReader(), arguments: xslArg, results: writer); } return xmlOutput; } protected CDataWriter(XmlWriter writer) { this.writer = writer; } XmlWriter writer; public string CData(object obj) { if (obj != null && obj is System.Xml.XPath.XPathNodeIterator) { var iter = obj as System.Xml.XPath.XPathNodeIterator; if (iter.Count > 0 && iter.MoveNext()) { var current = iter.Current; writer.WriteCData(current.OuterXml); } } return string.Empty; } } 公共类CDATA编写器 { 公共静态XDocument转换(XDocument文档、字符串文件XSLT) { XsltArgumentList xslArg=new XsltArgumentList(); XslCompiledTransform trans=新的XslCompiledTransform(); trans.Load(fileXslt); XDocument xmlOutput=新XDocument(); 使用(var writer=xmlOutput.CreateWriter()) { CDATA编写器信息=新的CDATA编写器(编写器); AddExtensionObject(“urn:cdata”,info); trans.Transform(输入:doc.CreateReader(),参数:xslArg,结果:writer); } 返回输出; } 受保护的CDATA编写器(XmlWriter编写器){this.writer=writer;} XmlWriter-writer; 公共字符串CData(对象obj) { if(obj!=null&&obj是System.Xml.XPath.XPathNodeIterator) { var iter=obj as System.Xml.XPath.XPathNodeIterator; 如果(iter.Count>0&&iter.MoveNext()) { 无功电流=额定电流; WriteCData(current.OuterXml); } } 返回字符串。空; } } 示例xslt文件:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:trans="urn:cdata">
<xsl:template name="cdata">
<Result>
<xsl:value-of select="trans:CData(*)" />
</Result>
</xsl:template>
</xsl:stylesheet>
一些解决方案:使用XSLT转换扩展对象编写输出XML,并使用XmlWriter方法WriteCData: public class CDataWriter { public static XDocument Transform(XDocument doc, string fileXslt) { XsltArgumentList xslArg = new XsltArgumentList(); XslCompiledTransform trans = new XslCompiledTransform(); trans.Load(fileXslt); XDocument xmlOutput = new XDocument(); using (var writer = xmlOutput.CreateWriter()) { CDataWriter info = new CDataWriter(writer); xslArg.AddExtensionObject("urn:cdata", info); trans.Transform(input: doc.CreateReader(), arguments: xslArg, results: writer); } return xmlOutput; } protected CDataWriter(XmlWriter writer) { this.writer = writer; } XmlWriter writer; public string CData(object obj) { if (obj != null && obj is System.Xml.XPath.XPathNodeIterator) { var iter = obj as System.Xml.XPath.XPathNodeIterator; if (iter.Count > 0 && iter.MoveNext()) { var current = iter.Current; writer.WriteCData(current.OuterXml); } } return string.Empty; } } 公共类CDATA编写器 { 公共静态XDocument转换(XDocument文档、字符串文件XSLT) { XsltArgumentList xslArg=new XsltArgumentList(); XslCompiledTransform trans=新的XslCompiledTransform(); trans.Load(fileXslt); XDocument xmlOutput=新XDocument(); 使用(var writer=xmlOutput.CreateWriter()) { CDATA编写器信息=新的CDATA编写器(编写器); AddExtensionObject(“urn:cdata”,info); trans.Transform(输入:doc.CreateReader(),参数:xslArg,结果:writer); } 返回输出; } 受保护的CDATA编写器(XmlWriter编写器){this.writer=writer;} XmlWriter-writer; 公共字符串CData(对象obj) { if(obj!=null&&obj是System.Xml.XPath.XPathNodeIterator) { var iter=obj as System.Xml.XPath.XPathNodeIterator; 如果(iter.Count>0&&iter.MoveNext()) { 无功电流=额定电流; WriteCData(current.OuterXml); } } 返回字符串。空; } } 示例xslt文件:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:trans="urn:cdata">
<xsl:template name="cdata">
<Result>
<xsl:value-of select="trans:CData(*)" />
</Result>
</xsl:template>
</xsl:stylesheet>
一些解决方案:使用XSLT转换扩展对象编写输出XML,并使用XmlWriter方法WriteCData: public class CDataWriter { public static XDocument Transform(XDocument doc, string fileXslt) { XsltArgumentList xslArg = new XsltArgumentList(); XslCompiledTransform trans = new XslCompiledTransform(); trans.Load(fileXslt); XDocument xmlOutput = new XDocument(); using (var writer = xmlOutput.CreateWriter()) { CDataWriter info = new CDataWriter(writer); xslArg.AddExtensionObject("urn:cdata", info); trans.Transform(input: doc.CreateReader(), arguments: xslArg, results: writer); } return xmlOutput; } protected CDataWriter(XmlWriter writer) { this.writer = writer; } XmlWriter writer; public string CData(object obj) { if (obj != null && obj is System.Xml.XPath.XPathNodeIterator) { var iter = obj as System.Xml.XPath.XPathNodeIterator; if (iter.Count > 0 && iter.MoveNext()) { var current = iter.Current; writer.WriteCData(current.OuterXml); } } return string.Empty; } } 公共类CDATA编写器 { 公共静态XDocument转换(XDocument文档、字符串文件XSLT) { XsltArgumentList xslArg=new XsltArgumentList(); XslCompiledTransform trans=新的XslCompiledTransform(); trans.Load(fileXslt); XDocument xmlOutput=新XDocument(); 使用(var writer=xmlOutput.CreateWriter()) { CDATA编写器信息=新的CDATA编写器(编写器); AddExtensionObject(“urn:cdata”,info); trans.Transform(输入:doc.CreateReader(),参数:xslArg,结果:writer); } 返回输出; } 受保护的CDATA编写器(XmlWriter编写器){this.writer=writer;} XmlWriter-writer; 公共字符串CData(对象obj) { 如果(obj!=null&&obj是System.Xml.X