【问题标题】:Iterating over list of strings in xslt, and using index迭代 xslt 中的字符串列表,并使用索引
【发布时间】:2016-10-10 15:33:08
【问题描述】:

我在 C# 中工作。 我使用 XSL 转换 (XSLT) 版本 1.0。 https://www.w3.org/TR/xslt 我使用 xslt 从 MyClass 类中的数据创建 xml MyClass 匹配模板并且有一个属性

 List<string> Strings

我需要这样导出:

<Line1> first string value Here </Line1>
<Line2> Second string value here </Line2>
.
.
.

有人可以帮助我了解如何做到这一点吗? 一切顺利 塔尔

【问题讨论】:

  • 我不明白。能否提供更明确的 XML 源示例?
  • 你说“我有一个类来匹配模板和属性”。那是哪种编程语言?您使用哪种 XSLT 处理器? XSLT 和其他编程语言之间的交互很大程度上取决于特定的处理器、它的 API 和编程平台。
  • @tal 我希望“nubies”能在发帖前阅读帮助。
  • 为什么要或需要使用 XSLT 来遍历字符串列表并创建 XML 元素?这听起来更像是 LINQ list.Select((item, index) =&gt; new XElement("Line" + index, item)) 的工作。
  • 考虑向我们展示您当前拥有的内容,即向我们展示一个具有属性或字段的类示例以及当前 XSLT 正在执行的工作,然后我们就会了解您正在尝试使用它做什么List&lt;string&gt; 财产。 XSLT 的通常输入是 XML,而不是 C# 类,因此我们需要了解在何处/如何将 C# 类和 XSLT 结合起来创建另一个 XML。

标签: c# xslt xml-serialization


【解决方案1】:

很简单:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication16
{
    class Program
    {

        static void Main(string[] args)
        {
            List<string> Strings = new List<string>() {
                    "first string value Here",
                    "Second string value here"
            };

            List<XElement> output = Strings.Select((x, i) => new XElement("Line" + (i + 1).ToString(), x)).ToList(); 
        }

    }

}

【讨论】:

  • 感谢您的回答。我需要使用 xslt 模板。
【解决方案2】:

我找到了解决办法。也许有更好的... 我创建了一个新的 ExportClass:

public class ExportString
{
   [XmlElement("StringObject")]
   public string StringObject{get; set;}
}

我创建了一个列表,因为属性是与 XSLT 匹配的 MyExportClass:

public class MyExportClass
{
   [XmlElement("LOS"]
   public List<StringObject> LOS<get; set;}
}

我在 XSLT 中使用了这种语法: 该代码在元素名称中包含索引:

<xsl:for-each select="LOS" xml:space="default">

 //Get the index
  <xsl:variable name ="index" select="position()"/>

  <xsl:element name ="Line{$index}">
  <xsl:value-of select = "StringObject"/>
  </xsl:element>

   //Line break
  <xsl:text> &#xa;</xsl:text>
</xsl:for-each>

结果:

<Line1> my first string </Line1>
<Line2> my second string </Line2>
.
.
.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2012-05-28
    • 1970-01-01
    相关资源
    最近更新 更多