需要使用 xsl 将新添加的条目添加到给定 xml 的新列

Posted

技术标签:

【中文标题】需要使用 xsl 将新添加的条目添加到给定 xml 的新列【英文标题】:Need to add newly added entry to new column for given xml using xsl 【发布时间】:2019-07-25 11:07:56 【问题描述】:

您好,我有一个要求,我需要将新添加的子项信息添加到单独的列中。 我也称赞过,但面临一些问题。 截至目前,新添加的条目已添加到相同的日期和版本信息列但我希望将此信息添加到单独的列中。

任何帮助都会被占用。

谢谢

XML:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<DeviceHistory>
  <Part Name="ERUI_Touch_LEFT">
    <Details>
      <Date>2019-01-28</Date>
      <DeviceInfo>Firmware Version: -1</DeviceInfo>
       <Date>2019-01-29</Date>
      <DeviceInfo>Firmware Version: -2</DeviceInfo>
    </Details>
  </Part>
  <Part Name="ERUI_Touch_RIGHT">
    <Details>
      <Date>2019-01-30</Date>
      <DeviceInfo>Firmware Version: -1</DeviceInfo>
       <Date>2019-01-31</Date>
      <DeviceInfo>Firmware Version: -2</DeviceInfo>
    </Details>
  </Part>
</DeviceHistory>  

xsl:

<?xml version="1.0" encoding="UTF-8"?>

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


<xsl:template match="Part[@Name]/Details">
  <html>
  <body> 

   <table-header> <xsl:value-of select ="../@Name"/></table-header>
  <table border="1" style="width:14cm">
    <tr bgcolor="lightgray" margin-top="10pt">
      <th>Date</th>
      <td>
      <td><xsl:apply-templates select="Date"/></td>   
      </td>
    </tr>  
    <tr bgcolor="lightgray">
      <th>VersionInfo</th>    
      <td>
       <td><xsl:apply-templates select="DeviceInfo"/></td>
    </td> 
    </tr>   
  </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

【问题讨论】:

到目前为止,我正在为每个部分创建一个表。每个表将有两行包含日期和版本信息,并且相邻列中有相应的信息数据。每次硬件更改都会更新此 xml 文件.每当同一部分有新条目时,我想在新列中添加此信息。 您能否显示示例 XML 的预期输出? @michael.hor257k 请参阅下面的链接了解预期和实际输出。 imgur.com/a/fm1ri89 @michael.hor257k 成功了,谢谢 【参考方案1】:

试试这个方法?

XSLT 1.0

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

<xsl:template match="/DeviceHistory">
    <html>
        <body> 
            <xsl:apply-templates select="Part"/>
        </body>
    </html>
</xsl:template>     

<xsl:template match="Part">
    <h3>
        <xsl:value-of select="@Name"/>
    </h3>
    <table border="1">
        <tr>
            <th>Date</th>
            <xsl:apply-templates select="Details/Date"/>
        </tr>
        <tr>
            <th>Version Info</th>
            <xsl:apply-templates select="Details/DeviceInfo"/>
        </tr>
    </table>        
</xsl:template>

<xsl:template match="Date | DeviceInfo">
    <td>
        <xsl:value-of select="."/>
    </td>   
</xsl:template>

</xsl:stylesheet>

应用于您的示例 XML,结果将是:

<html><body>
<h3>ERUI_Touch_LEFT</h3>
<table border="1">
<tr>
<th>Date</th>
<td>2019-01-28</td>
<td>2019-01-29</td>
</tr>
<tr>
<th>Version Info</th>
<td>Firmware Version: -1</td>
<td>Firmware Version: -2</td>
</tr>
</table>
<h3>ERUI_Touch_RIGHT</h3>
<table border="1">
<tr>
<th>Date</th>
<td>2019-01-30</td>
<td>2019-01-31</td>
</tr>
<tr>
<th>Version Info</th>
<td>Firmware Version: -1</td>
<td>Firmware Version: -2</td>
</tr>
</table>
</body></html>

渲染为:

【讨论】:

以上是关于需要使用 xsl 将新添加的条目添加到给定 xml 的新列的主要内容,如果未能解决你的问题,请参考以下文章

使用 XSL 根据 XML 的条件添加命名空间

如何遍历数据框,将新字段添加到系列,然后将该系列附加到 csv?

XSL-FO - 将背景图像添加到多个 PDF 页面

每当将新联系人添加到联系人时,如何添加类似whatsapp的选项以进行联系

使用从 xml 到 html 的 xsl 转换来维护空格和换行符

如何强制换行表条目