【问题标题】:Xml for txt file records用于txt文件记录的xml
【发布时间】:2013-08-05 08:20:36
【问题描述】:

我有一个场景将文本记录推送到数据库以跟踪个人的一些信息。

我的文本文件包含如下所示的数据:

logonID|agentName|modify|exception|start|stop|externalID        
14051286759|Jacks, Monica|1373477063|Break|01:45|02:00|USWMAJ43
14051286759|Jacks, Monica|1373477063|Break|06:10|06:25|USWMAJ43
14051286759|Jacks, Monica|1373477063|Lunch|03:45|04:30|USWMAJ43
14051286759|Jacks, Monica|1373477063|Open|00:00|01:45|USWMAJ43
14051286759|Jacks, Monica|1373477063|Open|02:00|03:45|USWMAJ43
14051286759|Jacks, Monica|1373477063|Open|04:30|06:10|USWMAJ43
14051286759|Jacks, Monica|1373477063|Open|06:25|08:30|USWMAJ43

现在我需要为 Break、Lunch 和 open 创建一个 XML(一条记录的打开数可能在 5 到 6 个条目之间变化):

<info>
<break>
<break_1>01:45-02:00</break_1>
<break_2>06:10-06:25</break_1>
</break>
<lunch>03:45-04:30</lunch>
<open>
<open_1>00:00-01:45</open_1>
<open_2>02:00-03:45</open_2>
<open_3>04:30-06:10</open_3>
<open_4>06:25-08:30</open_4>
</open>
</info>

提前致谢

【问题讨论】:

  • 您尝试过什么来实现您的解决方案?如果您陈述您的尝试而不是开发请求,您更有可能获得一些帮助。
  • 实际上我是在文件中插入整个 txt 记录...但是在检索和显示个人的详细信息时,这对我来说很困难..任何帮助都会有所帮助...
  • 先看看这个answer,它解释了如何将文本转换为xml。

标签: c# xslt


【解决方案1】:

XSLT

要使用 xslt,您需要将文件位置传递给 pText 参数,例如 file:///C:/data.txt

<xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:param name="pText" />
    <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'"/>
    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
    <xsl:variable name="vText" select="unparsed-text($pText)"/>
    <xsl:variable name="vLines" select="tokenize($vText, '\r?\n')[position() > 1][normalize-space()]"/>
    <xsl:template match="/">
        <info>
            <xsl:for-each-group select="$vLines" group-by="tokenize(.,'\|')[4]">
                <xsl:variable name="vKey" select="translate(current-grouping-key(), $uppercase, $smallcase)"/>
                <xsl:element name="{$vKey}">
                    <xsl:for-each select="current-group()">
                        <xsl:variable name="vValues" select="tokenize(.,'\|')"/>
                        <xsl:variable name="vPos" select="position()"/>
                        <xsl:element name="{$vKey}_{$vPos}">
                            <xsl:value-of select="concat($vValues[5],'-',$vValues[6])"/>
                        </xsl:element>
                    </xsl:for-each>
                </xsl:element>
            </xsl:for-each-group>
        </info>
    </xsl:template>
</xsl:stylesheet>

输入:

logonID|agentName|modify|exception|start|stop|externalID        
14051286759|Jacks, Monica|1373477063|Break|01:45|02:00|USWMAJ43
14051286759|Jacks, Monica|1373477063|Break|06:10|06:25|USWMAJ43
14051286759|Jacks, Monica|1373477063|Lunch|03:45|04:30|USWMAJ43
14051286759|Jacks, Monica|1373477063|Open|00:00|01:45|USWMAJ43
14051286759|Jacks, Monica|1373477063|Open|02:00|03:45|USWMAJ43
14051286759|Jacks, Monica|1373477063|Open|04:30|06:10|USWMAJ43
14051286759|Jacks, Monica|1373477063|Open|06:25|08:30|USWMAJ43

输出:

<info>
    <break>
        <break_1>01:45-02:00</break_1>
        <break_2>06:10-06:25</break_2>
    </break>
    <lunch>
        <lunch_1>03:45-04:30</lunch_1>
    </lunch>
    <open>
        <open_1>00:00-01:45</open_1>
        <open_2>02:00-03:45</open_2>
        <open_3>04:30-06:10</open_3>
        <open_4>06:25-08:30</open_4>
    </open>
</info>

C#

Reference 1Reference 2

XsltArgumentList argsList = new XsltArgumentList();
argsList.AddParam("pText", "", "file:///C:/data.txt");
XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null);
myXslTrans.Transform(myXPathDoc,argsList,myWriter);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多