0

我有一个如下所示的 XML 数据表。在 ROWSET1_ROW 中,有一个 ID 列表。每个 ID 对应于 ROWSET2_ROW 中的一段数据。我在循环和匹配 ROWSET2_ROW 中的 ID 到 ROWSET1_ROW 时遇到问题。最终,将创建一个 pdf 报告,该报告应显示三个不同的数据部分。从我的循环中,我不断获取要打印的 ROWSET2_ROW 数据的第一部分。换句话说,我将第一部分的 ROWSET2_ROW 数据打印了 3 次(重复),这是错误的。我希望我解释正确。

<DOCUMENT>
<DATA>
<ROWSET1>
  <ROWSET1_ROW>
  <INSPECTION_FEATURE_ID>2084</INSPECTION_FEATURE_ID>
</ROWSET1_ROW>
<ROWSET1_ROW>
  <INSPECTION_FEATURE_ID>2081</INSPECTION_FEATURE_ID>
</ROWSET1_ROW>
<ROWSET1_ROW>
  <INSPECTION_FEATURE_ID>2113</INSPECTION_FEATURE_ID>
</ROWSET1_ROW>
</ROWSET1>
<ROWSET2>
<ROWSET2_ROW>
  <INSPECTION_FEATURE_ID>2084</INSPECTION_FEATURE_ID>
  <SECONDARY_FEATURE_ID>0018-LAF-01</SECONDARY_FEATURE_ID>
  <INSPECTION_FEATURE>Embankment</INSPECTION_FEATURE>
</ROWSET2_ROW><ROWSET2_ROW>
  <INSPECTION_FEATURE_ID>2081</INSPECTION_FEATURE_ID>
  <SECONDARY_FEATURE_ID>0119-LAF-67</SECONDARY_FEATURE_ID>
  <INSPECTION_FEATURE>Sand Boil</INSPECTION_FEATURE>
</ROWSET2_ROW><ROWSET2_ROW>
  <INSPECTION_FEATURE_ID>2113</INSPECTION_FEATURE_ID>
  <SECONDARY_FEATURE_ID>2009-WAC-99</SECONDARY_FEATURE_ID>
  <INSPECTION_FEATURE>Seepage</INSPECTION_FEATURE>
</ROWSET2_ROW>
</DOCUMENT>
</DATA>

我尝试了以下代码,但一直收到错误消息-->“fo:flow”缺少子元素。我尝试了此代码的一些变体,例如删除 when 语句或更改循环,但如果我没有收到错误,我只会将第一部分或 ROWSET2_ROW 数据打印三次(重复)。

<xsl:for-each select=".//ROWSET1_ROW/INSPECTION_FEATURE_ID">
        <xsl:for-each select="//ROWSET2_ROW/INSPECTION_FEATURE_ID">
<xsl:when test="//ROWSET1_ROW//INSPECTION_FEATURE_ID = //ROWSET2_ROW//INSPECTION_FEATURE_ID">
<fo:table>
            <fo:table-column column-width="3in"/>
            <fo:table-column column-width="4.5in"/>



            <fo:table-body>
              <fo:table-row>
                <fo:table-cell padding-top="0.02in">
                  <fo:block>
                    <fo:table>
                      <fo:table-column column-width="1in"/>
                      <fo:table-column column-width="1.85in"/>
                      <fo:table-body>
                      <fo:table-row>
                          <fo:table-cell xsl:use-attribute-sets="cell cell-label">
                            <fo:block>
                              Inspection Feature Id
                            </fo:block>
                          </fo:table-cell>
                          <fo:table-cell xsl:use-attribute-sets="cell" font-weight="bold">
                            <fo:block>
                              <xsl:value-of select="//ROWSET2_ROW/INSPECTION_FEATURE_ID"/>
                            </fo:block>
                          </fo:table-cell>
                        </fo:table-row>
                        <fo:table-row>
                          <fo:table-cell xsl:use-attribute-sets="cell cell-label">
                            <fo:block>
                              Site Id
                            </fo:block>
                          </fo:table-cell>
                          <fo:table-cell xsl:use-attribute-sets="cell" font-weight="bold">
                            <fo:block>
                              <xsl:value-of select="//ROWSET2_ROW/SECONDARY_FEATURE_ID"/>
                            </fo:block>
                          </fo:table-cell>
                        </fo:table-row>
                        <fo:table-row>
                          <fo:table-cell xsl:use-attribute-sets="cell cell-label">
                            <fo:block>
                              Feature
                            </fo:block>
                          </fo:table-cell>
                          <fo:table-cell xsl:use-attribute-sets="cell">
                            <fo:block>
                              <xsl:value-of select="//ROWSET2_ROW/INSPECTION_FEATURE"/>
                            </fo:block>
                          </fo:table-cell>
                        </fo:table-row>
  </fo:table-body>
</fo:table>
</xsl:when>
</xsl:for-each>
</xsl:for-each>

对此的任何帮助将不胜感激。提前致谢

4

1 回答 1

0

当你建立表格时,这条线

<xsl:value-of select="//ROWSET2_ROW/INSPECTION_FEATURE_ID"/>

抓取它找到的第一个匹配项,这就是 rowset2 数据重复的原因。

您必须删除嵌套的 for-each:

 <xsl:for-each select="//ROWSET2_ROW/INSPECTION_FEATURE_ID">

for-each 尝试为每个 Rowset2 元素运行循环,但您真正想要的是处理 Rowset1 元素并向每个元素添加一些数据。

在表中,您需要一条语句,说明“查找具有与我当前正在处理的节点的 ID 匹配的 INSPECTION_FEATURE_ID 的 rowset2 数据”

所以类似的东西

<xsl:value-of select="sibling::ROWSET2_ROW[INSPECTION_FEATURE_ID = ./INSPECTION_FEATURE_ID]"/>

(尚未检查此语法)

于 2014-10-23T10:44:04.080 回答