【问题标题】:Xslt and c#: Transform the whole input xml to string in output xmlXslt 和 c#:将整个输入 xml 转换为输出 xml 中的字符串
【发布时间】:2013-11-14 10:07:21
【问题描述】:

我正在尝试将整个输入 xml 转换为输出 xml 中的字符串。 我快到了。我已经设法将所有内容放入字符串元素中,但我缺少 xml 声明。由于字符集信息,我需要这个。

有人知道如何管理这个吗?

我目前使用这个 c# 方法来完成这项工作:

public static string ConvertNodeToXmlString(XPathNodeIterator node)
{
        node.MoveNext();
        return node.Current.OuterXml;
}

它是从 xslt 调用的:

<xsl:variable name="result" xmlns:myScriptPrefix="http://HelperClass" select="myScriptPrefix:ConvertNodeToXmlString(.)" />

非常感谢所有帮助!

【问题讨论】:

  • 可能值得一提的是,由于有时会发生内存泄漏,您应该不惜一切代价避免内联 c#。尝试将它们放在扩展对象中以避免这种情况。

标签: c# xml xslt biztalk


【解决方案1】:

你想要哪种编码?你可以使用http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.writesubtree%28v=vs.110%29.aspx

node.MoveNext();

using (StringWriter sw = new StringWriter())
{
  using (XmlWriter xw = XmlWriter.Create(sw))
  {
    node.Current.WriteSubtree(xw);
  }
  return sw.ToString();
}

但由于 .NET 字符串是 UTF-16 编码的,您可能会得到 &lt;?xml version="1.0" encoding="UTF-16"?&gt;

【讨论】:

  • 嗨!我想传递并保留当前在声明中的编码。我认为它是 ISO-8859-1。
  • @user2783955,XSLT 数据模型不存储输入源的编码,因此使用WriteSubtree 的代码将不知道原始编码。
  • 好吧,我在这里如履薄冰,因为我还没有做过那么多内联 xslt 代码。但是 xslt 在发送到 c# 程序集之前会更改编码吗?是否可以从c#方法将编码更改为ISO-8859-1?
  • XSLT/XPath 在 XPathNavigators 和 XPathNodeIterators 以及 C# 代码上运行。那些不存储任何编码(除了使用 .NET 数据类型 System.String 这是一个 UTF-16 编码字符序列)。在花费太多精力输出特定编码之前,我们可以退后一步,以便您告诉我们您想要实现的目标吗?为什么要仅通过 XSLT (?) 传递完整的 XML 文档以将其传递给将其序列化为字符串的扩展?
  • 感谢您的解释!我实际上是在 biztalk 地图中执行此操作,但使用内联 xslt 覆盖。我要将 xml 消息加入到 oracle aq 中,这样做的方法是将整个 xml 映射到自动生成模式的一个输入参数(这是基于数据库中的过程生成的)。重要的是字符集正确,以便出队系统可以读取。
猜你喜欢
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多