【问题标题】:How to create XSLT stylesheet from input and output XML files如何从输入和输出 XML 文件创建 XSLT 样式表
【发布时间】:2014-02-06 01:12:13
【问题描述】:

我发现很难从以下输入和输出文件创建 XSLT 样式表。

输入 XML:

<DocumentManagement>
<Document>
    <DocUniqueID>MedTypeABC1234140204132332932CL</DocUniqueID>
    <PatientID>ABC1234</PatientID>
    <CreationDate>03 Feb 2014</CreationDate>
    <DocumentClass>Clinical Letters</DocumentClass>
    <MimeType>application/msword</MimeType>

    <MetaData>
        <FieldName>Original Document Creation Date</FieldName>
        <Value>03 Feb 2014</Value>
    </MetaData>

    <MetaData>
        <FieldName>Subject</FieldName>
        <Value>Neurology</Value>
    </MetaData>

    <MetaData>
        <FieldName>Description</FieldName>
        <Value>Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit</Value>
    </MetaData>

    <MetaData>
        <FieldName>Clinician</FieldName>
        <Value>Dr. Adam Smith</Value>
    </MetaData>
</Document>
</DocumentManagement>

所需的输出 XML:

<DocumentSet>
    <Comments>Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit/Comments>
    <Author>
        <Person value="Dr. Adam Smith" />
        <Role>Clinician</Role>
        <Speciality>Neurology</Speciality>
    </Author>
    <PatientId id="ABC1234" />
    <Document umiqueId="MedTypeABC1234140204132332932CL" creationTime="03 Feb 2014" mimeType="application/msword">
        <ClassCode description="Clinical Letters" />
        <FormatCode value="WORD" description="application/msword" />
    </Document>
</DocumentSet>

我在以下方面遇到了特别困难:

  • 评论应该从第三个元数据组中获得价值。
  • 专业应该从第二个元数据组中获得价值。
  • 人员和角色元素应从第 4 个元数据组中获取其值。

谁能告诉我正确的 XSLT 样式表?提前致谢。

我只能想出下面的 XSLT,当然不能得到我想要的完整输出。

  <xsl:template match="DocumentManagement/Document">
    <DocumentSet>
      <Comments>
        <xsl:value-of select="don't know what to put here"/>
      </Comments>
      <Author>
        <Person value="don't know what to put here" />
        <Role><xsl:value-of select="don't know what to put here"/></Role>
        <Speciality><xsl:value-of select="don't know what to put here"/></Speciality>
      </Author>
      <PatientId id="{PatientID}" />
      <Document umiqueId="{DocUniqueID}" creationTime="{CreationDate}" mimeType="{MimeType}">       
        <ClassCode description="{DocumentClass}" />
        <FormatCode value="don't know how to put correct value based on mimetype" description="{MimeType}" />
      </Document>
    </DocumentSet>  
  </xsl:template>

【问题讨论】:

  • 你尝试了什么? xsl 例子?
  • 请看我的编辑。谢谢。

标签: xslt


【解决方案1】:

请看下面的代码:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="DocumentManagement">
        <DocumentSet>
            <!-- 'MetaData[3]' means the third MetaData, and so forth and so on-->
            <comment><xsl:value-of select="Document/MetaData[3]/Value"/></comment>
            <Author>
                <Person value="{Document/MetaData[4]/Value}" />
                <Role><xsl:value-of select="Document/MetaData[4]/FieldName"/></Role>
                <Speciality><xsl:value-of select="Document/MetaData[2]/Value"/></Speciality>
            </Author>
            <PatientId id="{Document/PatientID}" />
            <Document umiqueId="{Document/DocUniqueID}" creationTime="{Document/CreationDate}" mimeType="{Document/MimeType}">
                <ClassCode description="{Document/DocumentClass}" />
                <xsl:element name="FormatCode">
                    <xsl:attribute name="value">
                        <xsl:choose>
                            <xsl:when test="substring-after(Document/MimeType, 'application/')='msword'">
                                <xsl:text>WORD</xsl:text>
                            </xsl:when>
                            <!-- set other conditions here -->
                        </xsl:choose>
                    </xsl:attribute>
                    <xsl:attribute name="description">
                        <xsl:value-of select="Document/MimeType"/>
                    </xsl:attribute>
                </xsl:element>
            </Document>
        </DocumentSet>
    </xsl:template>


</xsl:stylesheet>

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 2013-03-20
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多