使用带引号的XSLT进行XML转换

时间:2015-01-16 02:11:04

标签: xml xslt

我们正在尝试转换在ECopy共享扫描中完成的扫描作业的XML输出。 XML文件看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<data>
  <index id="FileNameField.eCSWHCRequest">eCSWHCRequest</index>
  <index id="FileNameField._">_</index>
  <index id="FileNameField.Date>08012015"</index>
  <index id="Submission By">Josh McMinn</index>
  <index id="Department">Admin</index>
  <index id="Submission Date (mm/dd/yyyy)">08/01/2015</index>
  <index id="Submission For">iPad</index>
  <index id="Total Cost">850</index>
</data>

我无法弄清楚如何显示各个索引ID并更改它们的名称。

所需的输出如下所示:

<?xml version="1.0" encoding="utf-8"?>
<data>
  <eCSWHCRequest>eCSWHCRequest</eCSWCRequest>
  <FileNameField>_</FileNameField>
  <Date>08012015</Date>
  <SubmissionBy>Josh McMinn</SubmissionBy>
</data>

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

这是一个让你入门的例子:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/data">
    <xsl:copy>
        <eCSWHCRequest>
            <xsl:value-of select="index[@id='FileNameField.eCSWHCRequest']"/>
        </eCSWHCRequest>
        <FileNameField>
            <xsl:value-of select="index[@id='FileNameField._']"/>
        </FileNameField>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

当应用于您的示例输入时(在将其更正为格式良好的XML之后!),结果为:

<?xml version="1.0" encoding="UTF-8"?>
<data>
   <eCSWHCRequest>eCSWHCRequest</eCSWHCRequest>
   <FileNameField>_</FileNameField>
</data>

注意:
</eCSWCRequest> 关闭<eCSWHCRequest>。在处理XML时你不能马虎,这是非常无情的。