XSLTは異なるノードからの要素値を比較します-パフォーマンスの問題

アンドレアスハウザー

次のXMLデータセット/ XML構造のノード要素をアセンブルするための2つの「forループ」よりも優れた方法はありますか?

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <nodeA>
        <nodeAa>
            <Row>
                <ID>100001</ID>
                <NAME>ABC</NAME>
                <EDV_NUMBER>900001</EDV_NUMBER>
            </Row>
            <Row>
                <ID>100002</ID>
                <NAME>DEF</NAME>
                <EDV_NUMBER>900002</EDV_NUMBER>
            </Row>
            <Row>
                <ID>700003</ID>
                <NAME>XYZ</NAME>
                <EDV_NUMBER>900002</EDV_NUMBER>
            </Row>
        </nodeAa>
    </nodeA>
    <nodeB>
        <nodeBa>
            <Row>
                <EDV_NUMBER>900001</EDV_NUMBER>
                <TYP>002</TYP>
            <Row>
                <EDV_NUMBER>900002</EDV_NUMBER>
                <TYP>002</TYP>
            </Row>
            <Row>
                <EDV_NUMBER>900002</EDV_NUMBER>
                <TYP>009</TYP>
            </Row>
        </nodeBa>
    </nodeB>
</root>

出力ファイルには、ノード「// nodeAa / Row /」の要素(IDとNAME)を含む、ノード「// nodeBa / Row / *」のすべての要素が含まれている必要があります。ここで、要素「EDV_NUMBER」は同じです。

<?xml version="1.0" encoding="UTF-8"?>
<CSV>
    <Row>
        <EDV_NUMBER>900001</EDV_NUMBER>
        <TYP>002</TYP>
        <ID>100001</ID>
        <NAME>ABC</NAME>
    </Row>
    <Row>
        <EDV_NUMBER>900002</EDV_NUMBER>
        <TYP>002</TYP>
        <ID>100002</ID>
        <NAME>DEF</NAME>
    </Row>
    <Row>
        <EDV_NUMBER>900002</EDV_NUMBER>
        <TYP>009</TYP>
        <ID>700003</ID>
        <NAME>XYZ</NAME>
    </Row>
</CSV>

出力は次のコードで生成できますが、大きなデータセットではうまく機能しません。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="#all" version="2.0">
  <xsl:output method="xml" encoding="UTF-8"/>  
     <xsl:template match="/">
     <CSV>
          <xsl:for-each select="/root/nodeB/nodeBa/Row">

               <xsl:variable name="FIBU" select="./EDV_NUMBER/text()"/>
               <xsl:variable name="TYP" select="./TYP/text()"/>     

               <Row select="{position()}">
                    <xsl:copy-of select="./*"/>

                    <xsl:for-each select="/root/nodeA/nodeAa/Row">
                    <xsl:variable name="counter" select="position()"/>  
                         <xsl:choose>
                              <xsl:when test="/root/nodeA/nodeAa/Row[$counter]/EDV_NUMMER/text()=$FIBU and $TYP='002' and /root/nodeA/nodeAa/Row[$counter]/TYP/text() &lt; '700000'">
                                   <xsl:copy-of select="./ID"/>
                                   <xsl:copy-of select="./NAME"/>
                              </xsl:when>
                              <xsl:when test="/root/nodeA/nodeAa/Row[$counter]/EDV_NUMMER/text()=$FIBU and $TYP='009' and /root/nodeA/nodeAa/Row[$counter]/TYP/text() &gt;= '700000'">
                                   <xsl:copy-of select="./ID"/>
                                   <xsl:copy-of select="./NAME"/>
                              </xsl:when>
                              <xsl:otherwise/>
                         </xsl:choose>
                    </xsl:for-each>
               </Row>
          </xsl:for-each>
     </CSV>
     </xsl:template>
</xsl:stylesheet>
マーク・ストレベル

内側のループを次のようなものに置き換えてみてください。/root/nodeA内の、外側のループの現在の要素と同じEDV_NUMBERを持つすべてのノードが選択されます。

<xsl:when test="/root/nodeA/nodeAa/Row[EDV_NUMBER=$FIBU]">
<!-- ... -->
</xsl:when>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パフォーマンスの問題

分類Dev

Perlと比較したJavaパフォーマンスの問題

分類Dev

SSESIMDコードのパフォーマンスの問題

分類Dev

QTextEditまたはQTextBrowserのパフォーマンスの問題

分類Dev

Rのループのパフォーマンスの問題

分類Dev

NestJsテストのパフォーマンスの問題

分類Dev

システムのパフォーマンスの問題

分類Dev

Pythonリスト操作のパフォーマンスの問題

分類Dev

iOSデバイスのパフォーマンスの問題

分類Dev

イオンタブのパフォーマンスの問題

分類Dev

イオンタブのパフォーマンスの問題

分類Dev

ループ内のjQueryパフォーマンスの問題

分類Dev

カーソルのパフォーマンス低下の問題

分類Dev

予期しないパフォーマンスの問題

分類Dev

HDDCドライブのパフォーマンスの問題

分類Dev

選択可能なRecyclerViewのパフォーマンスの問題

分類Dev

yaml-cppの主なパフォーマンスの問題

分類Dev

DataReaderのパフォーマンスの問題、奇妙な動作

分類Dev

奇妙なKinecticjsのパフォーマンスの問題

分類Dev

春の起動時のパフォーマンスの問題

分類Dev

matplotlibの凡例のパフォーマンスの問題

分類Dev

PageStorageKeyでのFlutterListViewのパフォーマンスの問題

分類Dev

VirtualBoxでのLinuxMintのパフォーマンスの問題

分類Dev

Burrows-PythonのWheelerのパフォーマンスの問題

分類Dev

Djangoの多対多のパフォーマンスの問題

分類Dev

SQLでのUNION句のパフォーマンスの問題

分類Dev

Where andContainsでのLINQtoEntitiesのパフォーマンスの問題

分類Dev

HikariCP での Postgresql のパフォーマンスの問題

分類Dev

パフォーマンスの問題、何が原因ですか?

Related 関連記事

  1. 1

    パフォーマンスの問題

  2. 2

    Perlと比較したJavaパフォーマンスの問題

  3. 3

    SSESIMDコードのパフォーマンスの問題

  4. 4

    QTextEditまたはQTextBrowserのパフォーマンスの問題

  5. 5

    Rのループのパフォーマンスの問題

  6. 6

    NestJsテストのパフォーマンスの問題

  7. 7

    システムのパフォーマンスの問題

  8. 8

    Pythonリスト操作のパフォーマンスの問題

  9. 9

    iOSデバイスのパフォーマンスの問題

  10. 10

    イオンタブのパフォーマンスの問題

  11. 11

    イオンタブのパフォーマンスの問題

  12. 12

    ループ内のjQueryパフォーマンスの問題

  13. 13

    カーソルのパフォーマンス低下の問題

  14. 14

    予期しないパフォーマンスの問題

  15. 15

    HDDCドライブのパフォーマンスの問題

  16. 16

    選択可能なRecyclerViewのパフォーマンスの問題

  17. 17

    yaml-cppの主なパフォーマンスの問題

  18. 18

    DataReaderのパフォーマンスの問題、奇妙な動作

  19. 19

    奇妙なKinecticjsのパフォーマンスの問題

  20. 20

    春の起動時のパフォーマンスの問題

  21. 21

    matplotlibの凡例のパフォーマンスの問題

  22. 22

    PageStorageKeyでのFlutterListViewのパフォーマンスの問題

  23. 23

    VirtualBoxでのLinuxMintのパフォーマンスの問題

  24. 24

    Burrows-PythonのWheelerのパフォーマンスの問題

  25. 25

    Djangoの多対多のパフォーマンスの問題

  26. 26

    SQLでのUNION句のパフォーマンスの問題

  27. 27

    Where andContainsでのLINQtoEntitiesのパフォーマンスの問題

  28. 28

    HikariCP での Postgresql のパフォーマンスの問題

  29. 29

    パフォーマンスの問題、何が原因ですか?

ホットタグ

アーカイブ