这是我的第一篇文章,所以我希望我能很好地展示格式/细节。此外,我对xml/xml还很陌生,但我已经到处寻找答案,但什么也没找到。我试图将要显示的数据全部显示在同一行上,但当我使用xsl文件运行xsltproc时,数据会在我想要的地方显示出来
首先,这是我得到的输出:
$ xsltproc MyXSL.xsl MyData.xml
<?xml version="1.0"?>
Measurement Information,Time Stamp:20120315150500.0+0000,Granularity Period:300,Measurement Values,Object Instance ID,,DataElement1,,Suspect Flag
DEFAULT2
Measurement Information,Time Stamp:20120315150500.0+0000,Granularity Period:300,Measurement Values,Object Instance ID,,DataElement2,,Suspect Flag
DEFAULT19
Measurement Information,Time Stamp:20120315150500.0+0000,Granularity Period:300,Measurement Values,Object Instance ID,,DataElement3,,Suspect Flag
DEFAULT2
Measurement Information,Time Stamp:20120315150500.0+0000,Granularity Period:300,Measurement Values,Object Instance ID,,DataElement4,,Suspect Flag
DEFAULT0
我想要的是以下内容:
Measurement Information,Time Stamp:20120315150500.0+0000,Granularity Period:300,Measurement Values,Object Instance ID,,DataElement1,DEFAULT,2,Suspect Flag
Measurement Information,Time Stamp:20120315150500.0+0000,Granularity Period:300,Measurement Values,Object Instance ID,,DataElement2,DEFAULT,19,Suspect Flag
Measurement Information,Time Stamp:20120315150500.0+0000,Granularity Period:300,Measurement Values,Object Instance ID,,DataElement3,DEFAULT,2,Suspect Flag
Measurement Information,Time Stamp:20120315150500.0+0000,Granularity Period:300,Measurement Values,Object Instance ID,,DataElement4,DEFAULT,0,Suspect Flag
这是我正在操作的数据,我遇到的问题是"mdc/md/mi/mv"字段、"moid"one_answers"r"的子字段:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="MyXSL.xsl" ?>
<mdc xmlns:HTML="http://www.w3.org/TR/REC-xml">
<md>
<mi>
<mts>20120315150500.0+0000</mts>
<gp>300</gp>
<mt>DataElement1</mt>
<mv>
<moid>DEFAULT</moid>
<r>2</r>
</mv>
</mi>
<mi>
<mts>20120315150500.0+0000</mts>
<gp>300</gp>
<mt>DataElement2</mt>
<mv>
<moid>DEFAULT</moid>
<r>19</r>
</mv>
</mi>
<mi>
<mts>20120315150500.0+0000</mts>
<gp>300</gp>
<mt>DataElement3</mt>
<mv>
<moid>DEFAULT</moid>
<r>2</r>
</mv>
</mi>
<mi>
<mts>20120315150500.0+0000</mts>
<gp>300</gp>
<mt>DataElement4</mt>
<mv>
<moid>DEFAULT</moid>
<r>0</r>
</mv>
</mi>
</md>
</mdc>
以下是我用来解析xml:的xsl文件
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="mdc">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="md">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="mi">
Measurement Information,Time Stamp:<xsl:value-of select="mts"/>,Granularity Period:<xsl:value-of select="gp"/>,Measurement Values,Object Instance ID,<xsl:for-each select="mt">,<xsl:value-of select="."/>,</xsl:for-each>,Suspect Flag
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="mts">
</xsl:template>
<xsl:template match="gp">
</xsl:template>
<xsl:template match="mt">
</xsl:template>
<xsl:template match="mv">
<xsl:value-of select="moid"/>
<xsl:for-each select="r">
<xsl:value-of select="."/>
</xsl:for-each>
<xsl:value-of select="sf"/>
</xsl:template>
</xsl:stylesheet>
所有文件都是通过纯unix文件系统创建/获得的,我通过sed-I的/\r//g的运行输入,再次确保这不是由行终止字符引起的
非常感谢您的帮助。
谢谢!
这里有一个简化的样式表,它可以创建您发布的输出作为所需结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="mi">
<xsl:text>Measurement Information</xsl:text>
<xsl:apply-templates select="descendant::*[not(*)]"/>
<xsl:text>,Suspect Flag </xsl:text>
</xsl:template>
<xsl:template match="mts">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text>Time Stamp:</xsl:text><xsl:value-of select="."/>
</xsl:template>
<xsl:template match="gp">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text>Granularity Period:</xsl:text><xsl:value-of select="."/>
<xsl:text>,Measurement Values,Object Instance ID,</xsl:text>
</xsl:template>
<xsl:template match="mt | mv/*">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>