XSLT副本不匹配文档

发布于 2025-02-12 12:10:04 字数 6232 浏览 1 评论 0原文

我正在收到一个带有许多文档的大XML,我需要将其分解为单个文档以进行处理。我正在使用XSLT。在源 /acc_document04 /idoc中,是一个反复出现的元素,但是在转换的每个结果中,它都是单数的。

我正在使用带有输入参数的XSLT 1.0,并且我以前做过类似的XSLT参数,但是我无法弄清楚为什么我的转换根本找不到任何数据。这是我的最新尝试: https://xsltfiddle.liberty.liberty.liberty.liberty-deevervement.net/eixh2wh

XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <ACC_DOCUMENT04>
      <IDOC BEGIN="1">
        <EDI_DC40 SEGMENT="1">
          <TABNAM>EDI_DC40</TABNAM>
          <DIRECT>2</DIRECT>
          <IDOCTYP>ACC_DOCUMENT04</IDOCTYP>
          <MESTYP>ACC_DOCUMENT</MESTYP>
          <MESFCT/>
          <SNDPOR>SAPXQ1</SNDPOR>
          <SNDPRT>LS</SNDPRT>
          <SNDPRN>MAGENTO</SNDPRN>
          <RCVPOR>SAPEQ1</RCVPOR>
          <RCVPRT>LS</RCVPRT>
          <RCVPRN>EQ1CLNT400</RCVPRN>
        </EDI_DC40>
        <E1BPACHE09 SEGMENT="1">
          <OBJ_TYPE>BKPFF</OBJ_TYPE>
          <OBJ_KEY>FB01</OBJ_KEY>
          <BUS_ACT>RFBU</BUS_ACT>
          <USERNAME>SAPPI</USERNAME>
          <HEADER_TXT>SL000000601</HEADER_TXT>
          <COMP_CODE>1713</COMP_CODE>
          <DOC_DATE>20220701</DOC_DATE>
          <PSTNG_DATE>20220701</PSTNG_DATE>
          <TRANS_DATE>20220701</TRANS_DATE>
          <FISC_YEAR>2022</FISC_YEAR>
          <DOC_TYPE>ZM</DOC_TYPE>
          <REF_DOC_NO>SL000001861</REF_DOC_NO>
        </E1BPACHE09>
        <E1BPACGL09 SEGMENT="1">
          <ITEMNO_ACC>1</ITEMNO_ACC>
          <GL_ACCOUNT>0012100050</GL_ACCOUNT>
          <ITEM_TEXT>NK9HZT53LLBX8N82</ITEM_TEXT>
          <REF_KEY_1>MC</REF_KEY_1>
          <VALUE_DATE>20220701</VALUE_DATE>
          <ALLOC_NMBR>SL000001861</ALLOC_NMBR>
        </E1BPACGL09>
        <E1BPACAR09 SEGMENT="1">
          <ITEMNO_ACC>2</ITEMNO_ACC>
          <CUSTOMER>0001077997</CUSTOMER>
          <PAYMT_REF>SL000001861</PAYMT_REF>
          <ALLOC_NMBR>SL000001861</ALLOC_NMBR>
          <ITEM_TEXT>NK9HZT53LLBX8N82</ITEM_TEXT>
        </E1BPACAR09>
        <E1BPACCR09 SEGMENT="1">
          <ITEMNO_ACC>1</ITEMNO_ACC>
          <CURRENCY>USD</CURRENCY>
          <AMT_DOCCUR>14.65</AMT_DOCCUR>
        </E1BPACCR09>
        <E1BPACCR09 SEGMENT="1">
          <ITEMNO_ACC>2</ITEMNO_ACC>
          <CURRENCY>USD</CURRENCY>
          <AMT_DOCCUR>-14.65</AMT_DOCCUR>
        </E1BPACCR09>
     </IDOC>
      
     <IDOC BEGIN="2">
        <EDI_DC40 SEGMENT="2">
          <TABNAM>EDI_2</TABNAM>
          <DIRECT>2</DIRECT>
          <IDOCTYP>ACC_DOCUMENT04</IDOCTYP>
          <MESTYP>ACC_DOCUMENT</MESTYP>
          <MESFCT/>
          <SNDPOR>SAPXQ1</SNDPOR>
          <SNDPRT>LS</SNDPRT>
          <SNDPRN>MAGENTO</SNDPRN>
          <RCVPOR>SAPEQ1</RCVPOR>
          <RCVPRT>LS</RCVPRT>
          <RCVPRN>EQ1CLNT400</RCVPRN>
        </EDI_DC40>
        <E1BPACHE09 SEGMENT="1">
          <OBJ_TYPE>BKPFF</OBJ_TYPE>
          <OBJ_KEY>FB01</OBJ_KEY>
          <BUS_ACT>RFBU</BUS_ACT>
          <USERNAME>SAPPI</USERNAME>
          <HEADER_TXT>SL000000598</HEADER_TXT>
          <COMP_CODE>1713</COMP_CODE>
          <DOC_DATE>20220701</DOC_DATE>
          <PSTNG_DATE>20220701</PSTNG_DATE>
          <TRANS_DATE>20220701</TRANS_DATE>
          <FISC_YEAR>2022</FISC_YEAR>
          <DOC_TYPE>ZM</DOC_TYPE>
          <REF_DOC_NO>SL000001864</REF_DOC_NO>
        </E1BPACHE09>
        <E1BPACGL09 SEGMENT="1">
          <ITEMNO_ACC>1</ITEMNO_ACC>
          <GL_ACCOUNT>0012100050</GL_ACCOUNT>
          <ITEM_TEXT>W82RKHDLHRWZNN82</ITEM_TEXT>
          <REF_KEY_1>MC</REF_KEY_1>
          <VALUE_DATE>20220701</VALUE_DATE>
          <ALLOC_NMBR>SL000001864</ALLOC_NMBR>
        </E1BPACGL09>
        <E1BPACAR09 SEGMENT="1">
          <ITEMNO_ACC>2</ITEMNO_ACC>
          <CUSTOMER>0001077997</CUSTOMER>
          <PAYMT_REF>SL000001864</PAYMT_REF>
          <ALLOC_NMBR>SL000001864</ALLOC_NMBR>
          <ITEM_TEXT>W82RKHDLHRWZNN82</ITEM_TEXT>
        </E1BPACAR09>
        <E1BPACCR09 SEGMENT="1">
          <ITEMNO_ACC>1</ITEMNO_ACC>
          <CURRENCY>USD</CURRENCY>
          <AMT_DOCCUR>56.21</AMT_DOCCUR>
        </E1BPACCR09>
        <E1BPACCR09 SEGMENT="1">
          <ITEMNO_ACC>2</ITEMNO_ACC>
          <CURRENCY>USD</CURRENCY>
          <AMT_DOCCUR>-56.21</AMT_DOCCUR>
        </E1BPACCR09>
      </IDOC>
    </ACC_DOCUMENT04>

变换:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="Doc" select="SL000000598" />
    <xsl:template match="/ACC_DOCUMENT04">
    <ACC_DOCUMENT04>
    <xsl:copy-of select="./IDOC[E1BPACHE09/HEADER_TXT=$Doc]"/>
    </ACC_DOCUMENT04>
</xsl:template>
</xsl:stylesheet>

预期的输出将只是第二个IDOC,因此缩写:

<?xml version="1.0" encoding="UTF-8"?>
<ACC_DOCUMENT04>
 <IDOC BEGIN="2">
...
    <E1BPACHE09 SEGMENT="1">
...
      <HEADER_TXT>SL000000598</HEADER_TXT>
      <REF_DOC_NO>SL000001864</REF_DOC_NO>
...
    </E1BPACHE09>
...
  </IDOC>
</ACC_DOCUMENT04>

I'm receiving a large XML with many documents and I need to break it down to single documents for processing. I'm using XSLT. In the source /ACC_DOCUMENT04/IDOC is a recurring element, but in each result of the transform it would a singular.

I'm using XSLT 1.0 with an input parameter, and I've done similar ones before, but I cannot figure out why my transform doesn't find any data at all. This is my latest attempt: https://xsltfiddle.liberty-development.net/eixh2wH

Input XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <ACC_DOCUMENT04>
      <IDOC BEGIN="1">
        <EDI_DC40 SEGMENT="1">
          <TABNAM>EDI_DC40</TABNAM>
          <DIRECT>2</DIRECT>
          <IDOCTYP>ACC_DOCUMENT04</IDOCTYP>
          <MESTYP>ACC_DOCUMENT</MESTYP>
          <MESFCT/>
          <SNDPOR>SAPXQ1</SNDPOR>
          <SNDPRT>LS</SNDPRT>
          <SNDPRN>MAGENTO</SNDPRN>
          <RCVPOR>SAPEQ1</RCVPOR>
          <RCVPRT>LS</RCVPRT>
          <RCVPRN>EQ1CLNT400</RCVPRN>
        </EDI_DC40>
        <E1BPACHE09 SEGMENT="1">
          <OBJ_TYPE>BKPFF</OBJ_TYPE>
          <OBJ_KEY>FB01</OBJ_KEY>
          <BUS_ACT>RFBU</BUS_ACT>
          <USERNAME>SAPPI</USERNAME>
          <HEADER_TXT>SL000000601</HEADER_TXT>
          <COMP_CODE>1713</COMP_CODE>
          <DOC_DATE>20220701</DOC_DATE>
          <PSTNG_DATE>20220701</PSTNG_DATE>
          <TRANS_DATE>20220701</TRANS_DATE>
          <FISC_YEAR>2022</FISC_YEAR>
          <DOC_TYPE>ZM</DOC_TYPE>
          <REF_DOC_NO>SL000001861</REF_DOC_NO>
        </E1BPACHE09>
        <E1BPACGL09 SEGMENT="1">
          <ITEMNO_ACC>1</ITEMNO_ACC>
          <GL_ACCOUNT>0012100050</GL_ACCOUNT>
          <ITEM_TEXT>NK9HZT53LLBX8N82</ITEM_TEXT>
          <REF_KEY_1>MC</REF_KEY_1>
          <VALUE_DATE>20220701</VALUE_DATE>
          <ALLOC_NMBR>SL000001861</ALLOC_NMBR>
        </E1BPACGL09>
        <E1BPACAR09 SEGMENT="1">
          <ITEMNO_ACC>2</ITEMNO_ACC>
          <CUSTOMER>0001077997</CUSTOMER>
          <PAYMT_REF>SL000001861</PAYMT_REF>
          <ALLOC_NMBR>SL000001861</ALLOC_NMBR>
          <ITEM_TEXT>NK9HZT53LLBX8N82</ITEM_TEXT>
        </E1BPACAR09>
        <E1BPACCR09 SEGMENT="1">
          <ITEMNO_ACC>1</ITEMNO_ACC>
          <CURRENCY>USD</CURRENCY>
          <AMT_DOCCUR>14.65</AMT_DOCCUR>
        </E1BPACCR09>
        <E1BPACCR09 SEGMENT="1">
          <ITEMNO_ACC>2</ITEMNO_ACC>
          <CURRENCY>USD</CURRENCY>
          <AMT_DOCCUR>-14.65</AMT_DOCCUR>
        </E1BPACCR09>
     </IDOC>
      
     <IDOC BEGIN="2">
        <EDI_DC40 SEGMENT="2">
          <TABNAM>EDI_2</TABNAM>
          <DIRECT>2</DIRECT>
          <IDOCTYP>ACC_DOCUMENT04</IDOCTYP>
          <MESTYP>ACC_DOCUMENT</MESTYP>
          <MESFCT/>
          <SNDPOR>SAPXQ1</SNDPOR>
          <SNDPRT>LS</SNDPRT>
          <SNDPRN>MAGENTO</SNDPRN>
          <RCVPOR>SAPEQ1</RCVPOR>
          <RCVPRT>LS</RCVPRT>
          <RCVPRN>EQ1CLNT400</RCVPRN>
        </EDI_DC40>
        <E1BPACHE09 SEGMENT="1">
          <OBJ_TYPE>BKPFF</OBJ_TYPE>
          <OBJ_KEY>FB01</OBJ_KEY>
          <BUS_ACT>RFBU</BUS_ACT>
          <USERNAME>SAPPI</USERNAME>
          <HEADER_TXT>SL000000598</HEADER_TXT>
          <COMP_CODE>1713</COMP_CODE>
          <DOC_DATE>20220701</DOC_DATE>
          <PSTNG_DATE>20220701</PSTNG_DATE>
          <TRANS_DATE>20220701</TRANS_DATE>
          <FISC_YEAR>2022</FISC_YEAR>
          <DOC_TYPE>ZM</DOC_TYPE>
          <REF_DOC_NO>SL000001864</REF_DOC_NO>
        </E1BPACHE09>
        <E1BPACGL09 SEGMENT="1">
          <ITEMNO_ACC>1</ITEMNO_ACC>
          <GL_ACCOUNT>0012100050</GL_ACCOUNT>
          <ITEM_TEXT>W82RKHDLHRWZNN82</ITEM_TEXT>
          <REF_KEY_1>MC</REF_KEY_1>
          <VALUE_DATE>20220701</VALUE_DATE>
          <ALLOC_NMBR>SL000001864</ALLOC_NMBR>
        </E1BPACGL09>
        <E1BPACAR09 SEGMENT="1">
          <ITEMNO_ACC>2</ITEMNO_ACC>
          <CUSTOMER>0001077997</CUSTOMER>
          <PAYMT_REF>SL000001864</PAYMT_REF>
          <ALLOC_NMBR>SL000001864</ALLOC_NMBR>
          <ITEM_TEXT>W82RKHDLHRWZNN82</ITEM_TEXT>
        </E1BPACAR09>
        <E1BPACCR09 SEGMENT="1">
          <ITEMNO_ACC>1</ITEMNO_ACC>
          <CURRENCY>USD</CURRENCY>
          <AMT_DOCCUR>56.21</AMT_DOCCUR>
        </E1BPACCR09>
        <E1BPACCR09 SEGMENT="1">
          <ITEMNO_ACC>2</ITEMNO_ACC>
          <CURRENCY>USD</CURRENCY>
          <AMT_DOCCUR>-56.21</AMT_DOCCUR>
        </E1BPACCR09>
      </IDOC>
    </ACC_DOCUMENT04>

Transform:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="Doc" select="SL000000598" />
    <xsl:template match="/ACC_DOCUMENT04">
    <ACC_DOCUMENT04>
    <xsl:copy-of select="./IDOC[E1BPACHE09/HEADER_TXT=$Doc]"/>
    </ACC_DOCUMENT04>
</xsl:template>
</xsl:stylesheet>

The expected output would be just the second IDOC, so abbreviated:

<?xml version="1.0" encoding="UTF-8"?>
<ACC_DOCUMENT04>
 <IDOC BEGIN="2">
...
    <E1BPACHE09 SEGMENT="1">
...
      <HEADER_TXT>SL000000598</HEADER_TXT>
      <REF_DOC_NO>SL000001864</REF_DOC_NO>
...
    </E1BPACHE09>
...
  </IDOC>
</ACC_DOCUMENT04>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痴情 2025-02-19 12:10:04

更改:

<xsl:param name="Doc" select="SL000000598" />

TO:

<xsl:param name="Doc" select="'SL000000598'" />

或:

<xsl:param name="Doc">SL000000598"</xsl:param>

您现在正在寻找一个名为SL00000000598的根元素。


请注意,如果您将其保留为原样,应该没有问题 - 或将其更改为&lt; xsl:param name =“ doc”/&gt; - 并将值作为运行时的参数传递为参数。失败的只是您的硬编码测试。

Change:

<xsl:param name="Doc" select="SL000000598" />

to:

<xsl:param name="Doc" select="'SL000000598'" />

or:

<xsl:param name="Doc">SL000000598"</xsl:param>

What you have now is looking for a root element named SL000000598.


Note that there should be no problem if you leave it as it is - or change it to <xsl:param name="Doc"/> - and pass the value as the parameter at runtime. It's only your hard-coded test that fails.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文