格式化XML的XSL

约翰

我试图使我的xsl文件正确,但出现了一些问题。这是我正在使用的xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<ExportedData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Header>
    <StartDate>2015-02-02T00:00:00</StartDate>
    <EndDate>2015-03-04T23:59:00</EndDate>
    <RecordCount>4</RecordCount>
    <Client />
    <DocumentCount>0</DocumentCount>
  </Header>
  <Applicants>
    <Applicant>
      <ApplicantId>2176</ApplicantId>
      <ModuleTypeId>1</ModuleTypeId>
      <ApplicantInfo>
        <Applications>
          <Application>
            <ApplicationId>6177</ApplicationId>
            <Fields>
              <Field>
                <FieldName>Action Status</FieldName>
                <FieldText>Submitted</FieldText>
              </Field>
              <Field>
                <FieldName>BGCheck Result</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Date Hired</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Location Code</FieldName>
                <FieldText>ManNY</FieldText>
              </Field>
            </Fields>
          </Application>
        </Applications>
      </ApplicantInfo>
      <ApplicantActionDocsInfo />
      <ApplicantFormsInfo />
      <ApplicantActionsInfo />
    </Applicant>
    <Applicant>
      <ApplicantId>2180</ApplicantId>
      <ModuleTypeId>1</ModuleTypeId>
      <ApplicantInfo>
        <Applications>
          <Application>
            <ApplicationId>6181</ApplicationId>
            <Fields>
              <Field>
                <FieldName>Action Status</FieldName>
                <FieldText>Submitted</FieldText>
              </Field>
              <Field>
                <FieldName>BGCheck Result</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Date Hired</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Location Code</FieldName>
                <FieldText>Test0701</FieldText>
              </Field>
            </Fields>
          </Application>
        </Applications>
      </ApplicantInfo>
      <ApplicantActionDocsInfo />
      <ApplicantFormsInfo />
      <ApplicantActionsInfo />
    </Applicant>
    <Applicant>
      <ApplicantId>2193</ApplicantId>
      <ModuleTypeId>1</ModuleTypeId>
      <ApplicantInfo>
        <Applications>
          <Application>
            <ApplicationId>6160</ApplicationId>
            <Fields>
              <Field>
                <FieldName>Action Status</FieldName>
                <FieldText>Submitted</FieldText>
              </Field>
              <Field>
                <FieldName>BGCheck Result</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Date Hired</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Location Code</FieldName>
                <FieldText>00 Demo</FieldText>
              </Field>
            </Fields>
          </Application>
          <Application>
            <ApplicationId>6170</ApplicationId>
            <Fields>
              <Field>
                <FieldName>Action Status</FieldName>
                <FieldText>Submitted</FieldText>
              </Field>
              <Field>
                <FieldName>BGCheck Result</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Date Hired</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Location Code</FieldName>
                <FieldText>00 Demo</FieldText>
              </Field>
            </Fields>
          </Application>
          <Application>
            <ApplicationId>6172</ApplicationId>
            <Fields>
              <Field>
                <FieldName>Action Status</FieldName>
                <FieldText>Submitted</FieldText>
              </Field>
              <Field>
                <FieldName>BGCheck Result</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Date Hired</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Location Code</FieldName>
                <FieldText>00 Demo</FieldText>
              </Field>
            </Fields>
          </Application>
        </Applications>
      </ApplicantInfo>
      <ApplicantActionDocsInfo />
      <ApplicantFormsInfo />
      <ApplicantActionsInfo />
    </Applicant>
    <Applicant>
      <ApplicantId>2196</ApplicantId>
      <ModuleTypeId>1</ModuleTypeId>
      <ApplicantInfo>
        <Applications>
          <Application>
            <ApplicationId>6184</ApplicationId>
            <Fields>
              <Field>
                <FieldName>Action Status</FieldName>
                <FieldText>Submitted</FieldText>
              </Field>
              <Field>
                <FieldName>BGCheck Result</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Date Hired</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Location Code</FieldName>
                <FieldText>Test0701</FieldText>
              </Field>
            </Fields>
          </Application>
          <Application>
            <ApplicationId>6186</ApplicationId>
            <Fields>
              <Field>
                <FieldName>Action Status</FieldName>
                <FieldText>Submitted</FieldText>
              </Field>
              <Field>
                <FieldName>BGCheck Result</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Date Hired</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Location Code</FieldName>
                <FieldText>Test0701</FieldText>
              </Field>
            </Fields>
          </Application>
          <Application>
            <ApplicationId>6188</ApplicationId>
            <Fields>
              <Field>
                <FieldName>Action Status</FieldName>
                <FieldText>Submitted</FieldText>
              </Field>
              <Field>
                <FieldName>BGCheck Result</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Date Hired</FieldName>
                <FieldText />
              </Field>
              <Field>
                <FieldName>Location Code</FieldName>
                <FieldText>Test0701</FieldText>
              </Field>
            </Fields>
          </Application>
        </Applications>
      </ApplicantInfo>
      <ApplicantActionDocsInfo />
      <ApplicantFormsInfo />
      <ApplicantActionsInfo />
    </Applicant>
  </Applicants>
</ExportedData>

如您所见,有4个主要申请人,但每个申请人内的ApplicantInfo中都有子元素。如何格式化多个子元素以使其与4个主要申请人相关联以适合表格?理想情况下,我希望为每个子元素增加一行,但是我对此没有足够的了解。

这是我当前拥有的xsl文件:

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

    <!-- match root - build html elements -->
    <xsl:template match="/">
        <html>
            <body>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="ExportedData">
        <xsl:apply-templates/>
    </xsl:template>

    <!-- Do nothing for the header -->
    <xsl:template match="Header"/>

    <!-- Build table for applicants -->
    <xsl:template match="Applicants">
        <h2>Applicants Info</h2>
        <table border="1">
            <tr bgcolor="#9acd32">
                <th>ApplicantId</th>
                <th>ModuleTypeId</th>
                <th>ApplicantInfo</th>
            </tr>
            <xsl:apply-templates/>
        </table>
    </xsl:template>

    <!-- for each applicant create a table row -->
    <xsl:template match="Applicant">
        <tr>
            <xsl:apply-templates/>
        </tr>
    </xsl:template>

    <!-- for each Applicant/ApplicantId generate table cell -->
    <xsl:template match="ApplicantId">
        <td>
            <xsl:apply-templates/>
        </td>
    </xsl:template>

    <xsl:template match="ModuleTypeId">
        <td>
            <xsl:apply-templates/>
        </td>
    </xsl:template>

    <xsl:template match="ApplicantInfo">
        <td>
            <xsl:apply-templates/>
        </td>
    </xsl:template>

    <xsl:template match="ApplicantActionDocsInfo">
        <td>
            <xsl:apply-templates/>
        </td>
    </xsl:template>

    <xsl:template match="ApplicantFormsInfo">
        <td>
            <xsl:apply-templates/>
        </td>
    </xsl:template>

    <xsl:template match="ApplicantActionsInfo">
        <td>
            <xsl:apply-templates/>
        </td>
    </xsl:template>


    <!-- you probably will want to add more stuff to the table, use templates to do so.-->  
    <!--<xsl:template match="ModuleTypeId | ApplicantInfo | ApplicantActionDocsInfo | ApplicantFormsInfo | ApplicantActionsInfo"/>-->

</xsl:stylesheet>

再次,它正确显示了4个主要ApplicantId,但是多个子元素未正确显示在表中。如何生成其他行以实现此目的?

更新:

我的输出当前是这样的:http : //i.imgur.com/vfntoV3.png

我希望它是这样的:http : //i.imgur.com/tAD88c1.png

michael.hor257k

我希望每个ApplicationId都有一行

如果是这样,您不应该为每个申请人创建一行,而是为每个应用程序创建一行。我也看不出为什么需要这样的模板林-几乎是无法管理的。

请尝试:

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="/">
    <html>
        <body>
            <h2>Applicants Info</h2>
            <table border="1">
            <tr bgcolor="#9acd32">
                <th>ApplicantId</th>
                <th>ModuleTypeId</th>
                <th>ApplicantInfo</th>
            </tr>
                <xsl:apply-templates select="ExportedData/Applicants/Applicant/ApplicantInfo/Applications/Application"/>
            </table>
        </body>
    </html>
</xsl:template>

<xsl:template match="Application">
    <tr>
        <td>
            <xsl:value-of select="ancestor::Applicant/ApplicantId"/>
        </td>
        <td>
            <xsl:value-of select="ancestor::Applicant/ModuleTypeId"/>
        </td>
        <td>
            <xsl:value-of select="."/>
        </td>
    </tr>
</xsl:template>

</xsl:stylesheet>

应用于输入的结果(呈现):

在此处输入图片说明

当然,标签Applicants Info是用词不当:实际上是Application Info

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从PowerShell格式化XML

来自分类Dev

在TSQL FOR XML中格式化XML

来自分类Dev

PHP-格式化XML输出

来自分类Dev

Excel XML:格式化内联文本

来自分类Dev

在球拍中格式化XML

来自分类Dev

PowerShell-格式化XML输出

来自分类Dev

在PHP中格式化XML

来自分类Dev

Python-写Xml(格式化)

来自分类Dev

Excel XML:格式化内联文本

来自分类Dev

格式化粗体文本XML

来自分类Dev

用Java格式化XML文件

来自分类Dev

PHP-格式化XML输出

来自分类Dev

Python-编写Xml(格式化)

来自分类Dev

php xml 模式格式化

来自分类Dev

以XML格式格式化资源中的字符串

来自分类Dev

如何使用gVim格式化未格式化的XML文档?

来自分类Dev

将XML转换为格式化文本瓶XSLT

来自分类Dev

为什么BeautifulSoup重新格式化我的XML?

来自分类Dev

格式化数据以写入XML的最佳方法

来自分类Dev

使用带有%,$和/的strings.xml并格式化

来自分类Dev

使用Boost可以更好地格式化XML?

来自分类Dev

boost :: property_tree xml漂亮的打印,格式化

来自分类Dev

XMLWriterTraceListener产生文本墙,而不是格式化的XML

来自分类Dev

在VBScript中格式化XML字符串

来自分类Dev

如何从XML格式化字符串数组

来自分类Dev

添加换行符并格式化xml内容

来自分类Dev

将XML导入SQL表并格式化数据

来自分类Dev

在树中格式化输出文件的XML无效

来自分类Dev

无法使用C#格式化xml